天天看點

使用python進行中文csv檔案,并讓excel正确顯示中文(避免亂碼)

使用python2進行中文時,經常會出現亂碼問題,之前使用python進行中文csv檔案時,處理過程程式輸出出現了亂碼,最後在程式中能夠正常顯示出中文,但是導出檔案時,使用excel打開出現了中文亂碼問題,但是使用ultraedit打開時,能正常顯示。現在找到了問題的所在,總結如下:

1)程式輸出中出現亂碼的原因是因為python2中中文編碼的問題,需要注意的是要将處理的中文檔案的編碼和python源檔案的編碼保持一緻,這樣不會出現中文亂碼。可以參考這兩篇文章關于Python腳本開頭兩行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定和Python中用encoding聲明的檔案編碼和檔案的實際編碼之間的關系

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()
           
使用python進行中文csv檔案,并讓excel正确顯示中文(避免亂碼)

處理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()
           
使用python進行中文csv檔案,并讓excel正确顯示中文(避免亂碼)

将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檔案

想學人工智能(Python、資料分析、機器學習、深度學習、推薦系統、強化學習),來公衆号AI派看看吧!!

使用python進行中文csv檔案,并讓excel正确顯示中文(避免亂碼)
使用python進行中文csv檔案,并讓excel正确顯示中文(避免亂碼)