簡體   English   中英

Windows上的奇怪路徑分隔符

[英]Strange path separators on 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'

(注意雙\\\\)一切正常。

為什么? 分隔符是'\\'還是不是,不是混合?

系統。 視窗7,64位,的Python 2.7(R27:82525,2010年7月4日,9點01分59秒)[MSC v.1500 32位(英特爾)]在Win32

選中 - 並且所有反斜杠都正確顯示。

你需要在路徑中使用額外的反斜杠來逃避反斜杠...就像你為'\\\\test1.html'所做的那樣。

'\\t'是制表符的轉義序列。

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

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

'\\test1.html'

對Windows路徑使用原始字符串:

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

否則,你的字符串的\\t片段將被解釋為制表符。

當下一個字符組合產生特殊含義時,反斜杠是一個轉義字符。 請看以下示例:

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

r,n和b在前面都有反斜杠時都有特殊含義。 t也是如此,它會產生一個標簽。 您需要將所有反斜杠加倍,以保持一致性,因為'\\\\'將產生反斜杠,或者,B,使用原始字符串: r'c:\\path\\to\\my\\file.txt' 前面的r將提示解釋器不要將反斜杠評估為轉義序列,從而阻止\\t作為選項卡出現。

反斜杠\\是Python中的轉義字符 所以你的實際文件路徑將是D:\\work\\Kindle\\srcs<tab>est1.html 使用os.sep,使用\\\\轉義反斜杠或通過使用r'some text'使用原始字符串。

除了使用原始字符串(帶有r字符的前綴字符串)之外,os.path模塊可能有助於在構建路徑名時自動提供OS正確的斜杠。

問題 - Windows文件名中的反斜杠提供了一個有趣的概述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM