os.path.join()可能存在错误



我的代码中出现了一个无法理解的错误。os.path.join将适用于我尝试的所有路径,除了那些在"RC4"之后以t开头的路径。这里有一个例子:

>>> os.path.join('RC4staticposts', '0.png')
'RC4\static\posts\0.png'
>>> os.path.join('RC4templatesposts', '0.png')
'RC4templates\posts\0.png'

如果我拆分第一个字符串,它会起作用:

>>> os.path.join('RC4', 'templatesposts', '0.png')
'RC4\templates\posts\0.png'

t具有TAB字符的特殊含义(类似于n和其他"转义"字符(。这就是为什么不鼓励在路径字符串中手动使用斜线的原因。

您最好将Path类与/运算符一起使用

from pathlib import Path
posts_path = Path('RC4') / 'templates' / 'posts'
img_path = posts_path / '0.png'

t是一个选项卡字符序列。使用原始字符串来避免这些问题:

os.path.join(r'RC4templatesposts', '0.png')

这是因为'\t`是一个特殊字符,表示Tab(2或4个空格(。为了避免以这种方式对其进行解释,您可以使用反斜杠对其进行转义,就像一样

os.path.join('RC4\templatesposts', '0.png')
>>> 'RC4\templates\posts\0.png'

尽管,根据xcodz-dot(评论(,在未来版本的python中,您也应该在发布之前转义斜杠,因为否则会引发错误,它也适用于python 3.8.6:

os.path.join('RC4\templates\posts', '0.png')
>> 'RC4\templates\posts\0.png'

或者,您可以在字符串前面放一个"r":

os.path.join(r'RC4templatesposts', '0.png')
>> 'RC4\templates\posts\0.png'

最新更新