如何摆脱由os.path.join创建的转义字符?

时间:2019-01-10 11:57:47

标签: python windows path escaping

使用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)

1 个答案:

答案 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()的调用中的字符串中包含太多反斜杠。错误消息就是这样,因此您可以在文件名中看到潜在的非打印字符。

相关问题