“扫描单引号字符串时出现 EOL”?(字符串中的反斜杠)[复制]

"EOL while scanning single-quoted string"? (backslash in string) [duplicate]

提问人: 提问时间:2/2/2009 更新时间:3/16/2023 访问量:42486

问:

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

你能帮帮我吗,你看到问题了吗?

python 语法错误

评论

1赞 ilya n. 6/10/2009
另请注意 Stack Overflow 如何自动为代码着色,使问题变得明显。

答:

23赞 gimel 2/2/2009 #1

反斜杠字符被解释为转义。对窗口路径使用双反斜杠:

>>> xp1 = "\\Documents and Settings\\"
>>> xp1
'\\Documents and Settings\\'
>>> print xp1
\Documents and Settings\
>>> 
11赞 Torsten Marek 2/2/2009 #2

除了黑斜杠问题之外,不要使用“+”运算符连接路径 - 而是使用。os.path.join

此外,在新版本的 Windows 上,像这样构造用户主目录的路径可能会失败。pywin32 中有用于此的 API 函数。

评论

1赞 James Brady 2/2/2009
+1 os.path.join 是要走的路。os.getenv('HOME') 会在 Win32 上设置吗?我没有要检查的 MS 框..
0赞 Torsten Marek 2/2/2009
我可怜的小 XP-in-a-VM 有“USERPROFILE”环境变量,它指向主目录,但我不知道它有多正式。
8赞 Markus Jarderot 2/2/2009 #3

您可以使用该函数获取用户主目录的路径。它甚至不必是现有用户。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“展开到用户主目录的路径。只需一个“”即可展开到当前用户的主目录。~

评论

0赞 Mark Tolonen 12/9/2011
+1,在 Windows 7 上正常工作,而 Windows 7 则如此。C:\Users\foo
6赞 MiniQuark 2/2/2009 #4

与许多其他语言一样,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”。

评论

2赞 Mark Tolonen 12/9/2011
原始字符串不能以奇数个反斜杠结尾。试试吧。
5赞 Mark Tolonen 12/9/2011 #5

\"被解释为“在字符串中插入双引号,因此缺少字符串文本的终止引号。请注意,原始字符串也无济于事。r"\"

引用文档(粗体是我的):

当存在“r”或“R”前缀时,反斜杠后面的字符将包含在字符串中,而不做任何更改,并且所有反斜杠都保留在字符串中。例如,字符串文本 r“\n” 由两个字符组成:反斜杠和小写字母 'n'。字符串引号可以用反斜杠转义,但反斜杠仍保留在字符串中;例如,r“\”“ 是由两个字符组成的有效字符串文本:反斜杠和双引号;r“\” 不是有效的字符串文本(即使是原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义以下引号字符)。另请注意,后跟换行符的单个反斜杠被解释为这两个字符作为字符串的一部分,而不是行继续。

无论如何,@MizardX给出的答案是编写您正在做的事情的正确方法。

1赞 V-cash 2/24/2021 #6

我有同样的错误,我根据 @Mark Tolonen 的评论解决了它

这是一个错误的路径字符串:

xp1 = "\Documents and Settings\"

这是一个正确的路径字符串,没有最后一个反斜杠:

xp1 = "\Documents and Settings"
0赞 Prajot Kuvalekar 1/6/2022 #7

在 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])