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
请帮助我,你看到了问题吗?
答案 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"