zoukankan      html  css  js  c++  java
  • 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过程。。。

  • 相关阅读:
    十分钟构建双十一交互分析大盘
    数字IT基础-数据采集总线
    阿里云文件存储(NAS)助力业务系统承载双十一尖峰流量
    如何在网络视听行业建一扇内容安全大门?
    Frost & Sullivan权威报告:阿里云再次领跑云WAF大中华区市场
    赋能时空云计算,阿里云数据库时空引擎Ganos上线
    点播转码相关常见问题及排查方式
    《边缘云计算技术及标准化白皮书》
    内存性能的正确解读
    《倡议书——节约用电,从我做起》
  • 原文地址:https://www.cnblogs.com/sleeper-qp/p/3281605.html
Copyright © 2011-2022 走看看