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