python文件操作編碼問題

用python開發系統時經常需要讀寫外部文件,因此我把外部文件的讀寫方式做一個簡單的總結。這裏以txt文件爲例,展示一下python讀寫外部文件的常用代碼。

將有一段字符串的txt文件分別保存成ANSI和utf-8格式,如下圖所示(下方的編碼可以設置保存格式)。
tips:如果需要查看txt文件的編碼格式,也可以打開文件,點擊另存爲,查看文件當前的編碼。
這裏寫圖片描述

實現編碼文件讀取的代碼如下所示。

import codecs,time
#
dir_read = "TestResource\\"
ansi_file = "ansi.txt"
utf8_file = "utf-8.txt"
try:
    f_gbk_gbk = codecs.open(dir_read+ansi_file,encoding="gbk")
    print("f_gbk_gbk = "+f_gbk_gbk.readline())
    f_gbk_gbk.close()
except Exception:
    print("f_gbk_gbk error")

try:
    f_gbk_utf8 = codecs.open(dir_read+ansi_file,encoding="utf-8")
    print("f_gbk_utf8 = "+f_gbk_utf8.readline())
    f_gbk_utf8.close()
except Exception:
    print("f_gbk_utf8 error")

try:
    f_utf8_utf8 = codecs.open(dir_read+utf8_file,encoding="utf-8")
    print("f_utf8_utf8 = "+f_utf8_utf8.readline())
    f_utf8_utf8.close()
except Exception:
    print("f_utf8_utf8 error")

try:
    f_utf8_gbk = codecs.open(dir_read+utf8_file,encoding="gbk")
    print("f_utf8_gbk"+f_utf8_gbk.readline())
    f_utf8_gbk.close()
except Exception:
    print("f_utf8_gbk error")

這段代碼的運行結果如下:

f_gbk_gbk = 暗示法王企鵝分爲發改委隔熱管
f_gbk_utf8 error
f_utf8_utf8 = 暗示法王企鵝分爲發改委隔熱管
f_utf8_gbk error

結論:因此對ANSI格式的txt,通過gbk編碼格式讀取;對utf-8格式的txt,通過utf-8編碼格式讀取。

在讀取文件時經常會遇到編碼問題,python對編碼問題的支持很到位(python的編碼過程:讀取文件的原有編碼->python內部編碼->顯示的文件編碼)。開發者可以通過使用codecs包來處理編碼問題,用例在以上代碼中已經展示。


這裏補充一下python3的文件編碼機制(與python2不同,python2中的字符串並不默認以unicode編碼表示,操作時常常需要添加decode函數):python3中的所有字符串都是Unicode編碼,在將文本數據讀入內存時python3會自動將文件內容轉換成unicode編碼格式。但文件本身的編碼格式需要在Open文件時指定(默認編碼是gbk),才能轉換成unicode。

另外補充一些常見編碼問題的解決方法:
1.編碼默認gbk,而文件是utf-8編碼的,用gbk編碼格式操作utf-8編碼文件會出現編碼解析錯誤。因此需要在open中添加編碼方式(open(file,encoding=”utf-8”))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章