解决Python读取图片路径存在转义字符

普遍解决路径中存在转义字符的问题的方法

普遍解决转义字符的问题,无非是以下这三种。

一、在路径前添加r

直接在路径前面加r,这种方法能够使字符保持原始的意思。

比如下面这种:

python 复制代码
path=r"D:\MindSpore\Dearui\source\ces\0AI.png"

二、将反斜杠"\"替换为正斜杠

python 复制代码
path="D:\MindSpore\Dearui\source\ces/0AI.png"

三、将反斜杠"\"替换为双反斜杠"\\"

python 复制代码
path="D:\\MindSpore\\Dearui\\source\\ces\\0AI.png"

使用os来读取图片的路径

这里我们采用了os来连接文件夹名与文件名。

具体方法如下:

python 复制代码
paths=r"D:\MindSpore\Dearui\source\ces"
imgfile = []
file_list = os.listdir(paths)
for i in file_list:
    newph = os.path.join(paths, i)
    imgfile.append(newph)
print(imgfile)

最后我们先直接打印出这个列表。

'D:\\\\MindSpore\\\\Dearui\\\\source\\\\ces\\\\0AI.png', 'D:\\\\MindSpore\\\\Dearui\\\\source\\\\ces\\\\AI2.png', 'D:\\\\MindSpore\\\\Dearui\\\\source\\\\ces\\\\AI3.png'

这里在用os时,可以看见是自动采用的是双反斜杠,有效规避了转义字符,但这里有涉及到了列表读取机制的问题。

python 复制代码
for f in imgfile:
    print(f)

一般我们是通过for循环这种方式来获取列表中的图片路径,然而这里却并非如我所想。

D:\MindSpore\Dearui\source\ces\0AI.png

D:\MindSpore\Dearui\source\ces\AI2.png

D:\MindSpore\Dearui\source\ces\AI3.png

使用for循环读取,竟然将双反斜杠变为了单斜杠,这也就导致了读取路径中存在了转义字符,这里面可能涉及到读取机制的问题,具体是什么这里就不探究了,下面我们来说下解决方案。

本文采取的方法

索性的是通过os,我们获得的路径是双反斜杠,毕竟连'\'这种都属于是转义字符,我们还真没什么办法对它进行变化。

python 复制代码
newph = os.path.join(paths, i).replace("\\","/")

这样修改就可以完成对转义字符的修改,并且通过for循环打印出来的值也是符合条件的。

for循环打印:

D:/MindSpore/Dearui/source/ces/0AI.png

D:/MindSpore/Dearui/source/ces/AI2.png

D:/MindSpore/Dearui/source/ces/AI3.png

列表打印:

'D:/MindSpore/Dearui/source/ces/0AI.png', 'D:/MindSpore/Dearui/source/ces/AI2.png', 'D:/MindSpore/Dearui/source/ces/AI3.png'

此函数也被我收录进了pyzjr中,需要下载0.0.19版本之后才可见。

python 复制代码
pip install pyzjr==0.0.19
python 复制代码
def getPhotopath(paths):
    """
    * log:0.0.19以后修改了一个比较大的bug,使用os读取的路径是"\\",本来是没有问题的,
    但如果使用列表循环读取,居然变成了单斜杠。
    * 功能:批量读取文件夹下的图片路径
    :param paths: 文件夹路径
    :return: 包含图片路径的列表
    """
    imgfile = []
    file_list = os.listdir(paths)
    for i in file_list:
        if i[0] in ['n', 't', 'r', 'b', 'f'] or i[0].isdigit():
            print(f"Error: 文件名 {i} 开头出现错误!")
        newph = os.path.join(paths, i).replace("\\","/")
        imgfile.append(newph)
    return imgfile

这里我添加了提示,可以指出可能是哪个文件出错了,便于后续问题的查找,能够手动修改的,其实是最后的,但如果你执意要用也是没有任何问题的。

更正:

目前此函数已经重新完善,可下载pip install pyzjr==1.0.5及更高的版本:

python 复制代码
def getPhotopath(paths,cd=False,debug=True):
    """
    * log
        0.0.19以后修改了一个比较大的bug
        1.0.2后将图片和所有文件路径分开
        1.0.5功能全部完善,不会再进行更新
    :param paths: 文件夹路径
    :param cd:添加当前运行的路径名
    :param debug:开启打印文件名错误的名字
    :return: 包含图片路径的列表
    """
    img_formats = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tif', 'tiff', 'webp', 'raw']
    imgfile = []
    allfile = []
    file_list = os.listdir(paths)
    for i in file_list:
        if debug:
            if i[0] in ['n', 't', 'r', 'b', 'f'] or i[0].isdigit():
                print(f"Error: 文件名 {i} 开头出现错误!")
        newph = os.path.join(paths, i).replace("\\", "/")
        allfile.append(newph)
        _, file_ext = os.path.splitext(newph)
        if file_ext[1:] in img_formats:
            imgfile.append(newph)
    if cd:
        cdd = getcwd()
        imgfile = [os.path.join(cdd, file).replace("\\", "/") for file in imgfile]
        allfile = [os.path.join(cdd, file).replace("\\", "/") for file in allfile]
    return imgfile,allfile

预计以后也不会再进行更正了。

相关推荐
PM老周3 分钟前
PRD怎么用AI质检?需求预审、人工复核与整改闭环
人工智能·项目管理·产品经理·prd
lialaka12 分钟前
「声纹迷宫(Acoustic Labyrinth)」:具身交互智能驱动的实时声学解构与全双工语音数字人控制台
人工智能·3d·交互
mabing99317 分钟前
Qt QMessageBox、QDialogButtonBox中英文翻译动态切换
开发语言·qt
BerryS3N18 分钟前
Java 后端转型大模型:Demo 能跑不等于能上线
java·人工智能·python·java后端·spring ai·langchain4j·大模型转型
Sagittarius_A*19 分钟前
【RCELABS】Level 17~18 —— PHP命令执行函数与环境变量注入
开发语言·安全·web安全·靶场·php·rce
冻柠檬飞冰走茶20 分钟前
PTA基础编程题目集 7-19 支票面额(C语言实现)
c语言·开发语言·数据结构·算法
制造数据与AI践行者老蒋23 分钟前
智联工坊实战:从“金鱼记忆”到“记住了”:给制造Agent装上记忆芯片的完整指南
人工智能·python·langchain·制造
某林21225 分钟前
ros从底层硬件到 Web 端部署
python·机器人·硬件架构·ros2
破碎的南瓜32 分钟前
靶场中使用到的php函数以及每种漏洞的防御方式
开发语言·php
硬核子牙34 分钟前
大模型是怎么学会的
人工智能·chatgpt·计算机组成原理