2013-07-31 249 views
1

我有一個原始的字符串表示這樣的窗口上的路徑:'F:\\Music\\v flac\\1-06 No Quarter.flac\r'我該怎麼做才能讓open()接受它? os.path.normpath()不起作用。如何將雙斜線路徑轉換爲open()接受的路徑?

>>> path 
'F:\\Music\\v flac\\1-06 No Quarter.flac\r' 
>>> fp=open(path,'rb') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IOError: [Errno 22] invalid mode ('rb') or filename: 'F:\\Music\\v flac\\1-06 No 
Quarter.flac\r' 
>>> fp=open(os.path.normpath(path),'rb') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IOError: [Errno 22] invalid mode ('rb') or filename: 'F:\\Music\\v flac\\1-06 No 
Quarter.flac\r' 
>>> 

回答

5

雙斜槓是這裏的問題。這是\r回車符在最後導致您的問題。

字符串,從路徑:

fp = open(path.strip(), 'rb') 

Python是隻顯示你的path一串一串的文字表示,爲便於調試。任何具有特殊含義的字符,在可打印的ASCII範圍之外,都會被轉義,包括反斜槓。值本身不具有一倍反斜槓:

>>> path = 'F:\\Music\\v flac\\1-06 No Quarter.flac\r' 
>>> path 
'F:\\Music\\v flac\\1-06 No Quarter.flac\r' 
>>> print path 
F:\Music\v flac\1-06 No Quarter.flac 
>>> path[:3] 
'F:\\' 
>>> len(path[:3]) 
3 

印刷path如何示出了僅具有單個反斜槓路徑值,以及如何路徑的前3個字符是F:\,具有長度3的字符串和不是4.在Python字符串中,反斜槓將表示轉義序列,因此Python也會轉義這些轉義序列。