Windows上的奇怪路径分隔符

2024-04-24 21:31:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行此代码:

#!/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'

(注意双字)一切正常。

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

系统。Windows764位, win32上的Python 2.7(r27:825252010年7月4日,09:01:59)[MSC v.1500 32位(Intel)]

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


Tags: pathtextpytesthtmllinetestsopen
3条回答

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

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

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

你需要用一个额外的反斜杠来转义路径中的反斜杠。。。就像你为'\\test1.html'做的那样。

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

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

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

'\\test1.html'

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

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

当r、n和b前面有反斜杠时,它们都有特殊的含义。t也是如此,它会产生一个tab。为了保持一致性,您需要A.将所有反斜杠加倍,因为'\\'将生成反斜杠,或者B.使用原始字符串:r'c:\path\to\my\file.txt'。前面的r将提示解释器不要将反斜杠计算为转义序列,从而防止\t显示为制表符。

相关问题 更多 >