【问题标题】:SyntaxError when trying to use backslash for Windows file path尝试对 Windows 文件路径使用反斜杠时出现语法错误
【发布时间】:2014-11-02 08:40:51
【问题描述】:

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

os.path.isfile()

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

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

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

当使用正斜杠时:

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

成功了。

我能问一下为什么会这样吗?甚至答案也很简单:“这是一个约定。”

【问题讨论】:

  • 我认为这不应该被关闭,因为它不是关于错误,而是关于 Python 以它的方式处理字符串的原因。加我一个。

标签: python python-3.x syntax


【解决方案1】:

这两个字符序列\x\U 有问题——它们是python 转义码。他们告诉python以一种特殊的方式解释后面的数据(前者插入字节,后者插入unicode)。您可以通过使用“原始”字符串来解决它:

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

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

【讨论】:

  • 非常感谢。我从大家的回复中学到了一些新东西。
【解决方案2】:

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

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 向我介绍了细分策略。我不使用 Python,但我想这种策略可以适用于大多数语言。
【解决方案3】:

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

如果您使用 原始字符串, 将反斜杠视为自己,它应该可以工作:

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

【讨论】:

  • 非常感谢,我想知道为什么人们使用 'r' 作为参数的一部分。现在我现在是“原始字符串”。
猜你喜欢
  • 2014-02-04
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2017-03-16
  • 2017-10-10
相关资源
最近更新 更多