使用python處理中文csv檔案,並讓excel正確顯示中文(避免亂碼)
阿新 • • 發佈:2019-02-08
使用python2處理中文時,經常會出現亂碼問題,之前使用python處理中文csv檔案時,處理過程程式輸出出現了亂碼,最後在程式中能夠正常顯示出中文,但是匯出檔案時,使用excel打開出現了中文亂碼問題,但是使用ultraedit開啟時,能正常顯示。現在找到了問題的所在,總結如下:
2)在程式中能夠正常輸出中文,但是匯出到檔案後使用excel開啟是出現中文亂碼是因為excel能夠正確識別用gb2312、gbk、gb18030或utf_8 with BOM 編碼的中文,如果是utf_8 no BOM編碼的中文檔案,excel開啟會亂碼。
根據以上兩點,結合自己的情況:我使用的是jupyter的ide,建立的python原始檔為utf8 no BOM格式的編碼,而要處理的csv檔案是用gbk編碼的,所以我需要將使用gbk編碼的csv檔案轉為utf_8編碼。
import codecs def ReadFile(filePath,encoding): with codecs.open(filePath,"r",encoding) as f: return f.read() def WriteFile(filePath,u,encoding): with codecs.open(filePath,"w",encoding) as f: f.write(u) ''' 定義GBK_2_UTF8方法,用於轉換檔案儲存編碼 ''' def GBK_2_UTF8(src,dst): content = ReadFile(src,encoding='gbk') WriteFile(dst,content,encoding='utf_8') ''' qyx.csv檔案使用GBK編碼儲存,現在將其轉為UTF_8儲存 ''' src = 'qyx.csv' dst = 'qyx_utf8.csv' GBK_2_UTF8(src,dst)
使用上面的程式碼能夠將使用GBK編碼的檔案轉為UTF8編碼的檔案。接下來就是真正處理csv檔案了。
import pandas as pd
from urllib import unquote
'''
讀取轉換儲存格式後的檔案
'''
path = 'qyx_utf8.csv'
data = pd.read_csv(path,)
data.head()
處理csv檔案:
''' 使用unquote方法對第三列的url進行decode ''' #data['newcol'] = data[u'關鍵詞程式碼'].map(unquote) #這樣會導致key識別錯誤,正確做法應該是去掉u data['newcol'] = data['關鍵詞程式碼'].map(unquote)#也可以使用ix來取得第三列的資料 #data['newcol'] = data.ix[:,3].map(unquote) data.head()
將data匯出到檔案中:
'''
將結果匯出到result.csv中,以UTF_8 with BOM編碼(微軟產品能正確識別UTF_8 with BOM儲存的中文檔案)儲存
'''
#data.to_csv('result_utf8_no_bom.csv',encoding='utf_8')#匯出的結果不能別excel正確識別
data.to_csv('result_utf8_with_bom.csv',encoding='utf_8_sig')
使用excel開啟result_utf8_no_bom.csv和result_utf8_with_bom.csv,發現能夠正確識別result_utf8_with_bom.csv檔案
本部落格不再維護更新,更多內容請移步個人部落格:腦洞大開
想學更多關於人工智慧/機器學習/深度學習知識,可以掃描二維碼關注微信公眾號:腦洞科技棧,關注就送學習資料哦!