Windows上的奇怪路径分隔符

时间:2011-08-03 15:14:19

标签: python windows filepath

我正在运行此代码:

#!/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,64bit, win 2.7上的Python 2.7(r27:82525,2010年7月4日,09:01:59)[MSC v.1500 32位(英特尔)]

已选中 - 并且所有反斜杠都显示正确。

6 个答案:

答案 0 :(得分:6)

你需要使用额外的反斜杠来逃避路径中的反斜杠...就像你为'\\test1.html'做的那样。

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

'D:\work\Kindle\srcs\test1.html基本上是'D:\work\Kindle\srcs est1.html'

您还可以使用原始文字,r'\test1.html'扩展为:

'\\test1.html'

答案 1 :(得分:6)

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

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

否则,您的字符串的\t部分将被解释为制表符。

答案 2 :(得分:6)

当下一个字符组合产生特殊含义时,反斜杠是一个转义字符。请看以下示例:

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

r,n和b在前面加上反斜杠时都有特殊含义。 t也是如此,它会产生一个标签。您需要将所有反斜杠加倍,以保持一致性,因为'\\'将生成反斜杠,或者B使用原始字符串:r'c:\path\to\my\file.txt'。前面的r将提示解释器不要将反斜杠评估为转义序列,从而阻止\t显示为选项卡。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

Gotcha — backslashes in Windows filenames提供了一个有趣的概述。