Python 忽略文件名編碼的方法
問(wèn)題
你想使用原始文件名執(zhí)行文件的I/O操作,也就是說(shuō)文件名并沒(méi)有經(jīng)過(guò)系統(tǒng)默認(rèn)編碼去解碼或編碼過(guò)。
解決方案
默認(rèn)情況下,所有的文件名都會(huì)根據(jù) sys.getfilesystemencoding() 返回的文本編碼來(lái)編碼或解碼。比如:
>>> sys.getfilesystemencoding()’utf-8’>>>
如果因?yàn)槟撤N原因你想忽略這種編碼,可以使用一個(gè)原始字節(jié)字符串來(lái)指定一個(gè)文件名即可。比如:
>>> # Wrte a file using a unicode filename>>> with open(’jalapexf1o.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’jalapenxccx83o.txt’]>>> # Open file with raw filename>>> with open(b’jalapenxccx83o.txt’) as f:... print(f.read())...Spicy!>>>
正如你所見(jiàn),在最后兩個(gè)操作中,當(dāng)你給文件相關(guān)函數(shù)如 open() 和 os.listdir() 傳遞字節(jié)字符串時(shí),文件名的處理方式會(huì)稍有不同。
討論
通常來(lái)講,你不需要擔(dān)心文件名的編碼和解碼,普通的文件名操作應(yīng)該就沒(méi)問(wèn)題了。 但是,有些操作系統(tǒng)允許用戶通過(guò)偶然或惡意方式去創(chuàng)建名字不符合默認(rèn)編碼的文件。 這些文件名可能會(huì)神秘地中斷那些需要處理大量文件的Python程序。
讀取目錄并通過(guò)原始未解碼方式處理文件名可以有效的避免這樣的問(wèn)題, 盡管這樣會(huì)帶來(lái)一定的編程難度。
關(guān)于打印不可解碼的文件名,請(qǐng)參考
以上就是Python 忽略文件名編碼的方法的詳細(xì)內(nèi)容,更多關(guān)于Python 忽略文件名編碼的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)2. 詳解CSS偽元素的妙用單標(biāo)簽之美3. XML入門(mén)的常見(jiàn)問(wèn)題(一)4. XML入門(mén)的常見(jiàn)問(wèn)題(四)5. 詳解JS前端使用迭代器和生成器原理及示例6. HTML DOM setInterval和clearInterval方法案例詳解7. html小技巧之td,div標(biāo)簽里內(nèi)容不換行8. 使用css實(shí)現(xiàn)全兼容tooltip提示框9. ASP中格式化時(shí)間短日期補(bǔ)0變兩位長(zhǎng)日期的方法10. 詳解PHP實(shí)現(xiàn)HTTP服務(wù)器過(guò)程
