“扫描单引号字符串时EOL”? (字符串中的反斜杠)

时间:2009-02-01 17:20:02

标签: python syntax-error

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

请帮助我,你看到了问题吗?

6 个答案:

答案 0 :(得分:21)

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

>>> xp1 = "\\Documents and Settings\\"
>>> xp1
'\\Documents and Settings\\'
>>> print xp1
\Documents and Settings\
>>> 

答案 1 :(得分:11)

除黑名单问题外,请勿使用“+”运算符加入路径 - 请改用os.path.join

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

答案 2 :(得分:8)

您可以使用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”已扩展到用户主目录的路径。只需将一个“~”扩展到当前用户主目录。

答案 3 :(得分:6)

Python,和许多其他语言一样,使用反斜杠作为转义字符(因此,xp1 = ...行末尾的双引号被视为字符串的一部分,而不是字符串的分隔符)

这实际上是非常基本的东西,所以我强烈建议您在继续之前阅读python tutorial

您可能对原始字符串感兴趣,转义反斜杠。只需在字符串之前添加 r

xp1 = r"\Documents and Settings\"

此外,在操作文件路径时,您应该使用 os.path 模块,该模块将根据O.S使用“/”或“\”。运行程序的程序。例如:

import os.path
xp1 = os.path.join("data","cities","geo.txt")

将在Linux上生成“data / cities / geo.txt”,在Windows上生成“data \ cities \ geo.txt”。

答案 4 :(得分:4)

\"被解释为“在字符串中插入双引号,因此您缺少字符串文字的终止引号。请注意,原始字符串r"\"也无法帮助。< / p>

引自documentation(粗体是我的):

  

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

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

答案 5 :(得分:1)

我遇到了同样的错误,我通过阅读@Mark Tolonen 的评论解决了它

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

xp1 = "\Documents and Settings\"

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

xp1 = "\Documents and Settings"