• 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过程。。。

  • 相关阅读:
    空悬指针、野指针、内存泄漏、内存溢出
    自定义消息的操作方法ON_MESSAGE(..)
    为什么static成员变量一定要在类外初始化?
    Ubuntu 系统目录结构
    Beyond Compare 4 30天评估期结束的解决办法
    C++ string 字符串 结尾 标志
    C语言——枚举类型用法
    结构体struct-联合体union-枚举enum
    网卡bood
    kvm 安装
  • 原文地址:https://www.cnblogs.com/sleeper-qp/p/3281605.html
Copyright © 2020-2023  润新知