python文件的中文處理以及我的思路

  環境:ubuntu12.04 python2.7  涉及:ascii,utf-8,gbk,gb2312python

  首先說下我的處理過程當中遇到的問題:ubuntu

     任務是這樣:有大概4000個txt,將他們合併到一個文件裏,而且去掉原文本中的全部回車python2.7

  就是 編碼

   1.txtspa

aaaa
aaaa
aaaa

   2.txtcode

bbbb
bbbb
bbbb

合併成blog

aaaaaaaaaaaa
bbbbbbbbbbbb

看起來很是很是簡單。。。utf-8

可是我就調了大概5個小時,主要緣由是因爲文件的編碼不一致。ci

廢話不說了,開始個人思路unicode

處理中文的基本思路

一,首先肯定處理文件的大概編碼

 好比說90%是gb2312,10%是ascii,那麼咱們先把這些文件所有轉換成gb2312格式

這裏須要的是enca

# enconv -L zh_CN -x gb2312 filename
enconv -L zh_CN -x gb2312 文件夾/*.txt

這個過程可能遇到「Unrecognized encoding」的問題,個人處理是找到這些文件直接丟掉,這裏怎麼處理看你的須要了

二,python讀取文件問題

   這裏須要瞭解的是python的decode 和 encode 

   decode:轉碼成python內碼:unicode

   encode:轉碼成你須要的

  前面已經強制轉換了編碼因此這裏就能夠知道如何decode了

  接下就是根據本身的需求encode了

  好比你強制轉換成gb2312,最終輸出成utf-8,那就是你先decode('gb2312'),而後encode('utf-8')

   這裏我是等輸出再轉碼的content.decode('gb18030','ignore').encode('utf-8')   ‘ignore’是忽視出錯的編碼

  總之就是要確保每一個流程中的編碼格式能在你控制中

到這基本就能處理問題。

可是,仍是有蛋疼的事就是空格,回車,換行這些問題的,由於空格能夠有不一樣的十六進制表示  咱們一般意義上的回車是「\r\n」,也就是換行,回車,可是有的編碼中卻只有‘\n’

怎麼肯定相似的問題?

三.查看文件的16進製表示

用hexdump這個命令,詳細參數你能夠本身baidu下

hexdump -C 文件

我經過比對正確和錯誤文件的回車

發現正確的是‘\n’  錯誤的是‘\r\n’

而後加入這個就行了 

好吧,其實我就是爲了安慰下個人5個小時bug過程。。。

相關文章
相關標籤/搜索