6
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

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

4

7 回答 7

21

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

>>> xp1 = "\\Documents and Settings\\"
>>> xp1
'\\Documents and Settings\\'
>>> print xp1
\Documents and Settings\
>>> 
于 2009-02-01T17:25:09.003 回答
11

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

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

于 2009-02-01T17:26:31.420 回答
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" 扩展为用户主目录的路径。只有一个“ ~”被扩展到当前用户的主目录。

于 2009-02-01T17:39:28.693 回答
6

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

这实际上是非常基本的东西,所以我强烈建议你在继续之前阅读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”。

于 2009-02-01T17:53:46.700 回答
5

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

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

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

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

于 2011-12-09T07:09:22.200 回答
1

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

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

xp1 = "\Documents and Settings\"

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

xp1 = "\Documents and Settings"
于 2021-02-24T11:15:58.690 回答
0

在 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])
于 2022-01-06T10:40:26.393 回答