W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
你想使用原始文件名執(zhí)行文件的I/O操作,也就是說文件名并沒有經(jīng)過系統(tǒng)默認編碼去解碼或編碼過。
默認情況下,所有的文件名都會根據(jù) sys.getfilesystemencoding()
返回的文本編碼來編碼或解碼。比如:
>>> sys.getfilesystemencoding()
'utf-8'
>>>
如果因為某種原因你想忽略這種編碼,可以使用一個原始字節(jié)字符串來指定一個文件名即可。比如:
>>> # Wrte a file using a unicode filename
>>> with open('jalape\xf1o.txt', 'w') as f:
... f.write('Spicy!')
...
6
>>> # Directory listing (decoded)
>>> import os
>>> os.listdir('.')
['jalape?o.txt']
>>> # Directory listing (raw)
>>> os.listdir(b'.') # Note: byte string
[b'jalapen\xcc\x83o.txt']
>>> # Open file with raw filename
>>> with open(b'jalapen\xcc\x83o.txt') as f:
... print(f.read())
...
Spicy!
>>>
正如你所見,在最后兩個操作中,當你給文件相關函數(shù)如 open()
和 os.listdir()
傳遞字節(jié)字符串時,文件名的處理方式會稍有不同。
通常來講,你不需要擔心文件名的編碼和解碼,普通的文件名操作應該就沒問題了。但是,有些操作系統(tǒng)允許用戶通過偶然或惡意方式去創(chuàng)建名字不符合默認編碼的文件。這些文件名可能會神秘地中斷那些需要處理大量文件的Python程序。
讀取目錄并通過原始未解碼方式處理文件名可以有效的避免這樣的問題,盡管這樣會帶來一定的編程難度。
關于打印不可解碼的文件名,請參考5.15小節(jié)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: