Windows上的奇怪路径分隔符
我正在运行这段代码:
#!/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
就不会变成制表符了。