Windows上奇怪的path分隔符

我运行这个代码:

#!/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行更改为

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

(注意双\ \)它一切正常。

为什么? 分隔符是“\”还是不是,不是混合?

系统。 Windows 7,64位,Python 2.7(r27:82525,Jul 4 2010,09:01:59)[MSC v.1500 32位(Intel)] win32

选中 – 所有反斜杠显示正确。

当下一个字符组合会导致特殊含义时,反斜杠是一个转义字符。 以下面的例子:

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

r,n和b在前面加一个反斜杠时都有特殊的含义。 t也是如此,这会产生一个标签。 你需要A.为了一致性,把所有的反斜杠加倍,因为'\\'会产生一个反斜杠,或者B使用原始的字符串: r'c:\path\to\my\file.txt' 。 前面的r会提示解释器不要将反斜杠作为转义序列进行评估,从而防止出现作为制表符。

对Windows路径使用原始字符串:

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

否则,您的字符串\t将被解释为Tab字符。

你需要在一个额外的反斜杠的路径中跳转反斜杠……就像你为'\\test1.html'所做的一样。

'\t'是制表符的转义序列。

'D:\work\Kindle\srcs\test1.html实质上是'D:\work\Kindle\srcs est1.html'

你也可以使用原始文字, r'\test1.html'展开为:

 '\\test1.html' 

反斜杠\是Python中的一个转义字符 。 所以你的实际文件路径是D:\work\Kindle\srcs<tab>est1.html 。 使用os.sep,用\\转义反斜杠或通过使用r'some text'使用原始字符串。

除了使用原始字符串(带有r字符的前缀字符串)之外,os.path模块可能会有助于在构建路径名时自动提供正确的斜杠。

Gotcha – Windows文件名中的反斜杠提供了一个有趣的概述。