尝试在Windows文件路径中使用反斜杠时出现SyntaxError错误

5

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

os.path.isfile()

但我注意到如果从Windows操作系统复制并粘贴时使用反斜杠:

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

我遇到了一个语法错误:(Unicode错误)等等等等。
当使用正斜杠时:
os.path.isfile("C:/Users/xxx/Desktop/xxx")

它起作用了。

我可以问一下为什么会发生这种情况吗?即使答案很简单,比如:“这是一个惯例。”


1
我认为这个问题不应该被关闭,因为它不是关于错误,而是关于Python处理字符串的方式。我支持这个问题。 - Russia Must Remove Putin
在Python中,无论如何最好使用正斜杠来表示Windows路径。 - Karl Knechtel
3个回答

6

反斜杠是转义符号。使用如下即可:

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


2
+1,感谢介绍分段策略。虽然我不使用Python,但我想这种策略可以适用于大多数编程语言。 - Chris Cirefice

4

由于反斜杠在Python中是转义符号。具体来说,如果使用\U转义字符,则会出现Unicode错误,因为它意味着“Unicode字符在此处; 下一个8个字符是32位十六进制代码点。”

如果使用原始字符串,则将反斜杠视为它们本身,这样就可以解决问题:

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

1
非常感谢,我一直在想为什么人们在参数中使用“r”。现在我知道它是“原始字符串(raw string)”。 - Yu Zhang

3

你遇到了与Python转义码相关的2个字符序列问题,即\x\U。它们告诉Python以一种特殊的方式解释其后面的数据(前者插入字节,后者插入Unicode)。你可以通过使用“原始”字符串来解决这个问题:

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

或者使用正斜杠(据我所知,Windows 将接受其中任何一种)。

非常感谢大家的回复,我从中学到了一些新知识。 - Yu Zhang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接