《Python Cookbook 3rd》笔记(5.14):忽略文件名编码
生活随笔
收集整理的這篇文章主要介紹了
《Python Cookbook 3rd》笔记(5.14):忽略文件名编码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
忽略文件名編碼
問題
你想使用原始文件名執行文件的 I/O 操作,也就是說文件名并沒有經過系統默認編碼去解碼或編碼過。
解法
默認情況下,所有的文件名都會根據 sys.getfilesystemencoding() 返回的文本編碼來編碼或解碼。比如:
>>> sys.getfilesystemencoding() 'utf-8' >>>如果因為某種原因你想忽略這種編碼,可以使用一個原始字節字符串來指定一個文件名即可。比如:
>>> # 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! >>>正如你所見,在最后兩個操作中,當你給文件相關函數如 open() 和 os.listdir()傳遞字節字符串時,文件名的處理方式會稍有不同。
討論
通常來講,你不需要擔心文件名的編碼和解碼,普通的文件名操作應該就沒問題了。但是,有些操作系統允許用戶通過偶然或惡意方式去創建名字不符合默認編碼的文件。這些文件名可能會神秘地中斷那些需要處理大量文件的 Python 程序。
讀取目錄并通過原始未解碼方式處理文件名可以有效的避免這樣的問題,盡管這樣會帶來一定的編程難度。
關于打印不可解碼的文件名,請參考 5.15 小節。
總結
以上是生活随笔為你收集整理的《Python Cookbook 3rd》笔记(5.14):忽略文件名编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python(12)-while语句+赋
- 下一篇: 《Java8实战》笔记(09):默认方法