Python 忽略文件名編碼的方法
問題
你想使用原始文件名執(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! >>>
正如你所見,在最后兩個操作中,當(dāng)你給文件相關(guān)函數(shù)如 open()
和 os.listdir()
傳遞字節(jié)字符串時,文件名的處理方式會稍有不同。
討論
通常來講,你不需要擔(dān)心文件名的編碼和解碼,普通的文件名操作應(yīng)該就沒問題了。 但是,有些操作系統(tǒng)允許用戶通過偶然或惡意方式去創(chuàng)建名字不符合默認編碼的文件。 這些文件名可能會神秘地中斷那些需要處理大量文件的Python程序。
讀取目錄并通過原始未解碼方式處理文件名可以有效的避免這樣的問題, 盡管這樣會帶來一定的編程難度。
關(guān)于打印不可解碼的文件名,請參考
以上就是Python 忽略文件名編碼的方法的詳細內(nèi)容,更多關(guān)于Python 忽略文件名編碼的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python 編碼規(guī)范(Google Python Style Guide)
- python 編碼規(guī)范整理
- Python 常用 PEP8 編碼規(guī)范詳解
- Python開發(fā)編碼規(guī)范
- Python3 json模塊之編碼解碼方法講解
- 解決python3 中的np.load編碼問題
- python源文件的字符編碼知識點詳解
- Python新建項目自動添加介紹和utf-8編碼的方法
- python3中編碼獲取網(wǎng)頁的實例方法
- 關(guān)于Python字符編碼與二進制不得不說的一些事
- 詳解Python中的編碼問題(encoding與decode、str與bytes)
- Python2與Python3關(guān)于字符串編碼處理的差別總結(jié)
- python基礎(chǔ)之編碼規(guī)范總結(jié)
相關(guān)文章
使用python將圖片按標(biāo)簽分入不同文件夾的方法
今天小編就為大家分享一篇使用python將圖片按標(biāo)簽分入不同文件夾的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python3.9用pip安裝wordcloud庫失敗的解決過程
一般在命令行輸入pip install wordcloud 總會顯示安裝失敗,所以下面這篇文章主要給大家介紹了關(guān)于Python3.9用pip安裝wordcloud庫失敗的解決過程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06Python之time模塊的時間戳,時間字符串格式化與轉(zhuǎn)換方法(13位時間戳)
今天小編就為大家分享一篇Python之time模塊的時間戳,時間字符串格式化與轉(zhuǎn)換方法(13位時間戳),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Django更新models數(shù)據(jù)庫結(jié)構(gòu)步驟
這篇文章主要介紹了Django更新models數(shù)據(jù)庫結(jié)構(gòu)的操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04