使用os.walk
遍历一个结构,使用os.path.join
为此创建路径。然后,我想使用这些字符串之一打开图像。但是,os.path.join
在连接路径时会创建转义符(\r
),然后不能使用相同的字符串来打开图像。
如何首先避免在os.path.join
中出现反斜杠?
代码:
def filepaths(directory):
files = []
for root, dirs, filenames in os.walk(directory):
for filename in filenames:
files.append os.path.join(root, filename)
return files
images = (filepath for filepath in filepaths(dir) if (filepath.lower().endswith('jpg')))
pic = max(things, key=os.path.getctime)
Image.open(pic)
答案 0 :(得分:1)
os.path.join
不会不插入,而只插入适当的路径分隔符。
>>> root = r"C:\Users\me\AppData"
>>> filename = "myfile.jpg"
>>> print (os.path.join(root, filename))
C:\Users\me\AppData\myfile.jpg
但是,如果您改为这样做:
>>> root = r"C:\Users\me\AppData"
>>> filename = "myfile.jpg"
>>> os.path.join(root, filename)
'C:\\Users\\me\\AppData\\myfile.jpg'
您将看到转义字符,因为这是您必须在Python代码中的字符串文字中添加的内容。要看到这一点,请尝试比较两种表示形式:
>>> r"C:\Users\me\AppData\myfile.jpg" == 'C:\\Users\\me\\AppData\\myfile.jpg'
True
第一个表示形式是原始字符串文字,其中反斜杠仅表示自身。第二种表示形式是常规字符串文字,您需要在其中将真正的反斜杠加倍,因为否则它们将被解释为转义字符。如您所见,这两种表示形式可能看起来不同,但实际上是显示相同数据的两种不同方式。
如果您在错误消息中看到文件名中的转义字符,那是可以预期的。这并不意味着您对open()
的调用中的字符串中包含太多反斜杠。错误消息就是这样,因此您可以在文件名中看到潜在的非打印字符。