天天看點

python寫入txt報錯_windows系統python3應用pycharm寫入txt檔案報錯問題

我有很多的中文樣本,在應用jieba中文分詞之後,想将分詞的結果寫入到txt檔案中,報了如下錯誤:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 143: illegal multibyte sequence

于是開始了漫長的排查錯誤之旅:

1、我首先檢視了我要寫入資料的資料類型,為str

2、檢視python3本身的編碼方式,python3中包含decode和encode兩種方式,其中decode是将其他字元轉化為unicode中間類型,即:解碼,而encode是将unicode類型轉化為其他字元類型,即:編碼。

3、于是,開始了第一次嘗試:将str類型編碼為utf-8類型,寫入到文檔中,事實證明寫入是沒有問題的,且寫入的檔案是byte型資料,如下:b'\xe5\xb0\x8a........首先這個不是我們想要的中文,隻是unicode類型對象,.其次,當我試圖再次讀取這個檔案的時候,我發現這個不可以被解碼,查閱資料之後,發現是如下原因:

u ='中文'      #指定字元串類型對象

str = u.encode('utf-8')     #以utf-8編碼對u進行編碼,獲得bytes類型對象

str1 = str.decode('utf-8')      #如果以utf-8的編碼對str進行解碼得到的結果,将無法還原原來的字元串内容

也就是當我們對字元串進行編碼之後,無法還原成原來的字元串内容,是以解碼失敗

4、于是嘗試先對str進行編碼,檢視結果:代碼如下

for j in a:

j=j.decode('utf-8')

f.write('%s'%j)

報錯:AttributeError: 'str' object has no attribute 'decode'。。

查閱資料發現:You are trying to decode an object that is already decoded. You have astr, there is no need to decode from UTF-8 anymore.(意思就是str已經是decode之後的結果,那你還要對decode的結果在次decode,顯然會報錯!!)

5、繼續查閱資料,有位大神指出,是我的pycharm 的File中設定IDE Encoding和Project Encoding和window系統預設的encoding編碼方式不一樣,即python3預設編碼和windows10系統的編碼方式不一緻,于是統一更改為UTF-8(但是python3不是跨平台的麼?這個按理說不應該有什麼影響吧,事實也證明改這裡并未解決我遇到的錯誤)

for  j  in a:

f.write('%s'%j)

f.close()

報錯:UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 143: illegal multibyte sequence,百思不得其解,郁悶,,于是又開始了新一輪的查閱資料

6、後來發現,在我打開檔案時,沒有指定打開檔案的編碼方式,我打開txt檔案的源代碼如下:

f=open('E:/Work/data/data.txt','r+')

這裡,如果不指定打開方式,window系統預設會以gbk方式打開吧,于是在這裡加上指定編碼方式:

f=open('E:/Work/data/data.txt','r+',encoding='utf-8')

繼續寫入檔案,success!!ok,困擾了這麼久的問題終于解決了。