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

  • 相关阅读:
    NDCG
    卷积核
    高斯核函数映射到无限维
    《Towards Knowledge-Based Recommender Dialog System》阅读笔记
    Pytorch官方教程:含注意力的seq2seq2机器翻译
    cad 已知拱高弦长求弧长
    MySQL直接将数据库的文件夹从服务器复制到本地,打开表提示需要修复 “is marked as crashed and should be repaired ”
    CSS小技巧:利用border实现三角形箭头
    完美解决ERROR 1064 (42000): You have an error in your SQL syntax; check the manual…
    Java 理论与实践:正确使用 Volatile 变量
  • 原文地址:https://www.cnblogs.com/sleeper-qp/p/3281605.html
Copyright © 2011-2022 走看看