提问人: 提问时间:2/2/2009 更新时间:3/16/2023 访问量:42486
“扫描单引号字符串时出现 EOL”?(字符串中的反斜杠)[复制]
"EOL while scanning single-quoted string"? (backslash in string) [duplicate]
问:
import os
xp1 = "\Documents and Settings\"
xp2 = os.getenv("USERNAME")
print xp1+xp2
给我错误
File "1.py", line 2
xp1 = "\Documents and Settings\"
^
SyntaxError: EOL while scannning single-quoted string
你能帮帮我吗,你看到问题了吗?
答:
反斜杠字符被解释为转义。对窗口路径使用双反斜杠:
>>> xp1 = "\\Documents and Settings\\"
>>> xp1
'\\Documents and Settings\\'
>>> print xp1
\Documents and Settings\
>>>
除了黑斜杠问题之外,不要使用“+”运算符连接路径 - 而是使用。os.path.join
此外,在新版本的 Windows 上,像这样构造用户主目录的路径可能会失败。pywin32 中有用于此的 API 函数。
评论
您可以使用该函数获取用户主目录的路径。它甚至不必是现有用户。os.path.expanduser
>>> import os.path
>>> os.path.expanduser('~foo')
'C:\\Documents and Settings\\foo'
>>> print os.path.expanduser('~foo')
C:\Documents and Settings\foo
>>> print os.path.expanduser('~')
C:\Documents and Settings\MizardX
"~user
“展开到用户主目录的路径。只需一个“”即可展开到当前用户的主目录。~
评论
C:\Users\foo
与许多其他语言一样,Python 使用反斜杠作为转义字符(xp1=末尾的双引号...因此,line 被视为字符串的一部分,而不是字符串的分隔符)。
这实际上是非常基本的东西,所以我强烈建议您在继续之前阅读 python 教程。
您可能对原始字符串感兴趣,这些字符串不会转义反斜杠。只需在字符串前面添加 r:
xp1 = r"\Documents and Settings\"
此外,在操作文件路径时,您应该使用 os.path 模块,该模块将使用“/”或“\”,具体取决于运行程序的操作系统。例如:
import os.path
xp1 = os.path.join("data","cities","geo.txt")
将在 Linux 上生成“data/cities/geo.txt”,在 Windows 上生成“data\cities\geo.txt”。
评论
\"
被解释为“在字符串中插入双引号,因此缺少字符串文本的终止引号。请注意,原始字符串也无济于事。r"\"
引用文档(粗体是我的):
当存在“r”或“R”前缀时,反斜杠后面的字符将包含在字符串中,而不做任何更改,并且所有反斜杠都保留在字符串中。例如,字符串文本 r“\n” 由两个字符组成:反斜杠和小写字母 'n'。字符串引号可以用反斜杠转义,但反斜杠仍保留在字符串中;例如,r“\”“ 是由两个字符组成的有效字符串文本:反斜杠和双引号;r“\” 不是有效的字符串文本(即使是原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义以下引号字符)。另请注意,后跟换行符的单个反斜杠被解释为这两个字符作为字符串的一部分,而不是行继续。
无论如何,@MizardX给出的答案是编写您正在做的事情的正确方法。
我有同样的错误,我根据 @Mark Tolonen 的评论解决了它
这是一个错误的路径字符串:
xp1 = "\Documents and Settings\"
这是一个正确的路径字符串,没有最后一个反斜杠:
xp1 = "\Documents and Settings"
在 Windows 中
for file in glob.glob('C:\Users\7000020370\3D Objects\audio\data\*\*'):
print(file.split("\\")[0])
这将抛出错误,但下面的不会
for file in glob.glob(r'C:\Users\7000020370\3D Objects\audio\data\*\*'):
print(file.split("\\")[0])
上一个:Python 变量不接受名称
下一个:F# 语法错误
评论