2016-08-31 33 views
1

我有一個名爲「não.mp3」的文件,當我嘗試用pathlib打開它時,名稱轉換爲「nao.mp3」,因爲沒有這樣的文件在文件夾中,python返回錯誤:python3.5用latin1字符打開文件的名稱

>>> p = Path("D:/não.mp3") 
>>> p 
WindowsPath('D:/nao.mp3') 
>>> p.exists() 
False 
>>> with p.open() as f: f.readline() 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\everton\AppData\Local\Programs\Python\Python35\lib\pathlib.py", line 1136, in open 
    opener=self._opener) 
    File "C:\Users\everton\AppData\Local\Programs\Python\Python35\lib\pathlib.py", line 992, in _opener 
    return self._accessor.open(self, flags, mode) 
    File "C:\Users\everton\AppData\Local\Programs\Python\Python35\lib\pathlib.py", line 371, in wrapped 
    return strfunc(str(pathobj), *args) 
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\nao.mp3' 

回答

0

不幸的是,它看起來像你將不得不通過Unicode代碼點作爲你的字符串的一部分。該代碼點爲是「00E3」試試這個:

p = Path("D:/n\u00e3o.mp3") 

做這件事時在Windows 10(以及具有相應的文件),我得到

>>> p.exists() 
True 

它看起來並不像pathlib以您期望的方式處理unicode字符。您可以嘗試其他庫,例如osshutil

os.listdir可以給你的所有目錄中的文件名,如果你給它的目錄名稱作爲字節b''

>>> os.listdir(b'D:/') 
[b'n\xe3o.mp3'] 

利用這一點,你可以得到所有的文件,您可以使用列表建立路徑。您可以通過使用bytes_object.decode('latin-1')

+0

將字節對象轉換回字符串那麼,有沒有辦法讓我把列表a = [「não」,「ã」]並自動將代碼點傳遞到列表中,所以結果會是a = [「n \ u00e3o」,「\ u00e3」]? – user3927607

+0

可以嘗試在循環中使用'str.replace('a','\ u00e3')'方法。 – perfect5th

+0

我認爲這是行不通的,如果我在列表中有一個像「和」那樣的單詞,它會變成「\ u00e3nd」:(我試圖弄清楚如何處理它,一般來說,任何單詞都可以。 – user3927607

相關問題