在Windows上使用奇怪的路径分隔符

6

I an running this code:

#!/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, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32

已检查-所有反斜杠均显示正确。


1
你可以在Windows(或者甚至是DOS)中使用斜杠路径分隔符。请参考http://en.wikipedia.org/wiki/Path_%28computing%29。 - Fred Larson
6个回答

6

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

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

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

6

您需要在路径中使用额外的反斜杠转义反斜杠...就像您对'\\test1.html'所做的那样。

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

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

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

'\\test1.html'

6
反斜杠是转义字符,当下一个字符组合会产生特殊含义时使用。以下是一些示例:
>>> '\r'
'\r'
>>> '\n'
'\n'
>>> '\b'
'\x08'
>>> '\c'
'\\c'
>>>

当反斜线前面加上 r、n 或 b 时,它们都有特殊的含义。同样适用于 t,它会生成一个制表符。为了保持一致性,您需要将所有反斜杠都加倍,因为 '\\' 会生成一个反斜杆。或者,您可以使用原始字符串:r'c:\path\to\my\file.txt'。前面的 r 告诉解释器不要将反斜杠解析为转义序列,从而防止 \t 出现为一个制表符。


1

在Python中,反斜杠\是一个转义字符。因此,您实际的文件路径将是D:\work\Kindle\srcs<tab>est1.html。使用os.sep,用\\转义反斜杠或使用原始字符串r'一些文本'


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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接