python文件的中文处理以及个人思路

  环境:ubuntu12.04 python2.7  涉及:ascii,utf-8,gbk,gb2312

  首先说下个人处理过程中遇到的问题:

     任务是这样:有大概4000个txt,将他们合并到一个文件里,并且去掉原文本中的所有回车

  就是 

   1.txt

aaaa
aaaa
aaaa

   2.txt

bbbb
bbbb
bbbb

合并成

aaaaaaaaaaaa
bbbbbbbbbbbb

看起来非常非常简单。。。

但是我就调了大概5个小时,主要原因是由于文件的编码不一致。

废话不说了,开始我的思路

处理中文的基本思路

一,首先确定处理文件的大概编码

 比如说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’是忽视出错的编码

  总之就是要确保每个流程中的编码格式能在你控制中

到这基本就能处理问题。

但是,还是有蛋疼的事就是空格,回车,换行这些问题的,因为空格可以有不同的十六进制表示  我们通常意义上的回车是“ ”,也就是换行,回车,但是有的编码中却只有‘ ’

怎么确定类似的问题?

三.查看文件的16进制表示

用hexdump这个命令,详细参数你可以自己baidu下

hexdump -C 文件

我通过比对正确和错误文件的回车

发现正确的是‘ ’  错误的是‘ ’

然后加入这个就好了 

好吧,其实我就是为了安慰下我的5个小时bug过程。。。

原文地址:https://www.cnblogs.com/sleeper-qp/p/3281605.html