当前位置: 首页 > news >正文

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

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

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

一、在路径前添加r

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

比如下面这种:

path=r"D:\MindSpore\Dearui\source\ces\0AI.png"

二、将反斜杠“\”替换为正斜杠

path="D:\MindSpore\Dearui\source\ces/0AI.png"

三、将反斜杠“\”替换为双反斜杠“\\”

path="D:\\MindSpore\\Dearui\\source\\ces\\0AI.png"

使用os来读取图片的路径

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

具体方法如下:

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

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,我们获得的路径是双反斜杠,毕竟连'\'这种都属于是转义字符,我们还真没什么办法对它进行变化。

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版本之后才可见。

pip install pyzjr==0.0.19
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及更高的版本:

def getPhotopath(paths,cd=False,debug=True):"""* log0.0.19以后修改了一个比较大的bug1.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

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

http://www.lryc.cn/news/116680.html

相关文章:

  • Windows 安装 pandoc 将 jupyter 导出 pdf 文件
  • 混合云环境实现K8S可观测的6大策略
  • 音视频 FFmpeg命令行搭建
  • ​ORACLE wallet实现无需输入用户名与密码登陆数据库 注意修改目录权限
  • linux - 用户权限
  • 计蒜客T1115——字符串判等
  • Android Framework工具——EA画图
  • 使用MyEclipse如何部署Descriptor (XML)编辑器?
  • Codeforces Round 889 (Div. 2)C题题解
  • 无涯教程-Perl - Subroutines(子例程)
  • Rpc异步日志模块
  • python-pip
  • 无涯教程-Perl - getppid函数
  • AUTOSAR规范与ECU软件开发(基础篇)1.2 汽车电子控制系统的基本构成
  • 一个可以通过多个条件筛选的系统界面是如何实现的(springboot+mybatis)
  • WebRTC | 实现数据流的一对一通信
  • 基于MATLAB小波变换的信号突变点检测
  • JUC并发编程(JUC核心类、TimeUnit类、原子操作类、CASAQS)附带相关面试题
  • 个人用C#编写的壁纸管理器 - 开源研究系列文章
  • iTextSharp 生成PDF
  • 基于微信小程序的传染病酒店隔离平台设计与实现(Java+spring boot+MySQL+微信小程序)
  • vue3中用watch监听响应式数据的注意点
  • Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)
  • 【单片机】51单片机,TLC2543,驱动程序,读取adc
  • 誉天HCIE-Cloud_Computing3.0课程简介
  • Unity之ShaderGraph 节点介绍 Procedural节点
  • 期权定价模型系列【1】—BSM通用式模型
  • HA3 SQL样本实验:一种混合计算查询的全新样本解决方案
  • Linux(Web与html)
  • SpringBoot 底层机制分析[上]