1. 程式人生 > >使用python處理中文csv檔案,並讓excel正確顯示中文(避免亂碼)

使用python處理中文csv檔案,並讓excel正確顯示中文(避免亂碼)

使用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檔案

本部落格不再維護更新,更多內容請移步個人部落格:腦洞大開

想學更多關於人工智慧/機器學習/深度學習知識,可以掃描二維碼關注微信公眾號:腦洞科技棧,關注就送學習資料哦奮鬥奮鬥奮鬥