尝试对Windows文件路径使用反斜杠时出现SyntaxError

时间:2014-09-09 02:37:20

标签: python python-3.x syntax

我尝试使用以下代码行确认文件是否存在:

os.path.isfile()

但我注意到,如果通过Windows操作系统的复制和粘贴使用反斜杠:

os.path.isfile("C:\Users\xxx\Desktop\xxx")

我遇到语法错误:( unicode错误)等等。

使用正斜杠时:

os.path.isfile("C:/Users/xxx/Desktop/xxx")

有效。

请问为什么会这样?甚至答案也很简单:“这是一种惯例。”

3 个答案:

答案 0 :(得分:5)

反斜杠是转义符号。这应该有效:

os.path.isfile("C:\\Users\\xxx\\Desktop\\xxx")

这是有效的,因为你转义了转义符号,Python将它作为这个文字传递:

"C:\Users\xxx\Desktop\xxx"

但更好的做法是确保跨平台兼容性以收集您的路径段(可能有条件地,基于平台),并使用os.path.join

path_segments = ['/', 'Users', 'xxx', 'Desktop', 'xxx']
os.path.isfile(os.path.join(*path_segments))

应该为您的案件返回True

答案 1 :(得分:4)

因为反斜杠是Python中的转义。具体来说,您得到 Unicode错误,因为\U转义意味着“此处为Unicode字符;接下来的8个字符是32位十六进制代码点。”

如果您使用原始字符串将反斜杠视为自己,它应该有效:

os.path.isfile(r"C:\Users\xxx\Desktop\xxx")

答案 2 :(得分:3)

您遇到了2个字符序列\x\U的问题 - 它们是python转义码。它们告诉python以特殊方式解释它们之后的数据(前者插入字节,后者插入unicode)。你可以使用“原始”字符串来解决它:

os.path.isfile(r"C:\Users\xxx\Desktop\xxx")

或使用正斜杠(因为,IIRC,windows将接受任何一个)。