Windows上的奇怪路径分隔符

6 投票
6 回答
12042 浏览
提问于 2025-04-16 22:48

我正在运行这段代码:

#!/usr/bin/python      coding=utf8
#  test.py = to demo fault
def loadFile(path):
    f = open(path,'r')
    text = f.read()
    return text
if __name__ == '__main__':
    path = 'D:\work\Kindle\srcs\test1.html'
    document = loadFile(path)
    print len(document)

结果出现了一个错误提示。

D:\work\Kindle\Tests>python.exe test.py
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    document = loadFile(path)
  File "test.py", line 5, in loadFile
    f = open(path,'r')
IOError: [Errno 22] invalid mode ('r') or filename: 'D:\\work\\Kindle\\srcs\test1.html'

D:\work\Kindle\Tests>

如果我把路径那一行改成

path = 'D:\work\Kindle\srcs\\test1.html'

(注意这里有两个\\),一切就正常了。

这是为什么呢?分隔符要么是'\',要么不是,怎么会有混合的情况呢?

我的系统是:Windows 7,64位,Python 2.7(版本号:r27:82525,2010年7月4日,09:01:59)[MSC v.1500 32位(Intel)],在win32上运行。

我检查过了,所有的反斜杠都显示正确。

6 个回答

6

在路径中,如果有反斜杠,你需要多加一个反斜杠来转义... 就像你在 '\\test1.html' 中做的那样。

'\t' 是一个转义序列,用来表示一个制表符,也就是我们常说的“Tab键”。

'D:\work\Kindle\srcs\test1.html' 实际上就等于 'D:\work\Kindle\srcs est1.html',中间的反斜杠被当成了普通字符。

你也可以使用原始字符串,像 r'\test1.html' 这样的写法会展开成:

'\\test1.html'
6

在Windows路径中使用原始字符串:

path = r'D:\work\Kindle\srcs\test1.html'

否则,字符串中的\t会被当作制表符来处理。

6

反斜杠(\)是一个转义字符,当后面的字符组合会有特殊含义时,就需要用到它。举几个例子:

>>> '\r'
'\r'
>>> '\n'
'\n'
>>> '\b'
'\x08'
>>> '\c'
'\\c'
>>>

当反斜杠后面跟着 r、n 或 b 时,它们都有特殊的意思。t 也是一样,它会产生一个制表符(tab)。你可以选择两种方法来处理反斜杠:A. 把所有的反斜杠都写成两个,因为 '\\' 会显示一个反斜杠,或者 B. 使用原始字符串:r'c:\path\to\my\file.txt'。在这个字符串前面的 r 会告诉解释器不要把反斜杠当作转义序列来处理,这样 \t 就不会变成制表符了。

撰写回答