环境: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’是忽视出错的编码

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

到这基本就能处理问题。

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

怎么确定类似的问题?

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

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

hexdump -C 文件

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

发现正确的是‘\n’  错误的是‘\r\n’

然后加入这个就好了

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

python文件的中文处理以及个人思路的更多相关文章

  1. 解决vs2013下创建的python文件,到其他平台(如linux)下中文乱码(或运行时报SyntaxError: (unicode error) 'utf-8' codec can't decode byte...)

    Vs2013中创建python文件,在文件中没输入中文时,编码为utf-8的,如图 接着,在里面输入几行中文后,再次用notepad++查看其编码如下,在vs下运行也报错(用cmd运行就不会): 根据 ...

  2. Python | 多种编码文件(中文)乱码问题解决

    问题线索   1 可以知道的是,文本文件的默认编码并不是utf8. 我们打开一个文本文件,并点击另存为 2 我们在新窗口的编码一栏看到默认编码是ANSI.先不管这个编码是什么编码,但是通过下拉列表我们 ...

  3. Python在向CSV文件写中文时乱码的处理办法

    前言 python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode.decode.当list.tuple.dict里面有中文时,打印出来的是Unicode编码,这个是无解的.对中文 ...

  4. day8.python文件操作

    打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...

  5. 【Python文件处理】递归批处理文件夹子目录内所有txt数据

    因为有个需求,需要处理文件夹内所有txt文件,将txt里面的数据筛选,重新存储. 虽然手工可以做,但想到了python一直主张的是自动化测试,就想试着写一个自动化处理数据的程序. 一.分析数据格式 需 ...

  6. python文件和元组

    python文件操作 相较于java,Python里的文件操作简单了很多 python 获取当前文件所在的文件夹: os.path.dirname(__file__) 写了一个工具类,用来在当前文件夹 ...

  7. Python中使用中文

    python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识.当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了. 先来看看pytho ...

  8. python 文件及文件夹操作

    python 文件.目录操作(新增.移动.删除等) python 文件夹与文件操作 mport string, os, sys dir = '/var' print '----------- no s ...

  9. Python入门之中文乱码

    python入门编码: Python 文件中如果未指定编码,有中文代码时候,在执行过程会出现报错: File "test.py", line 2 SyntaxError: Non- ...

随机推荐

  1. 电商指尖---(9).net发展Solr中间Facet特征

    上一节中我们演示了在SolrAdmin中使用Facet功能来进行分组统计.这一节我们看看如何使用.NET开发Solr中的Facet功能.在讲Facet功能的同一时候, 我们看下.Net中如何使用Sol ...

  2. 如何使用linq操作datatable进行分组

    使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...

  3. sonp跨域请求

    sonp跨域请求学习笔记   前言 ajax,用苍白的话赞扬:很好. 我们可以使用ajax实现异步获取数据,减少服务器运算时间,大大地改善用户体验:我们可以使用ajax实现小系统组合大系统:我们还可以 ...

  4. TreeView的绑定

    近期遇到了TreeView的数据库绑定问题,确实是弄了我好几天,特别是多级节点的分步绑定,最開始不分步,发现所有载入页面都卡爆了,真心让人头疼.所以放出来,给须要的朋友看看,以免大家走冤枉路. 1.仅 ...

  5. MySQL之数据库结构优化

    1.选择合适的数据类型 一.选择能够存下数据类型最小的数据类型 二.可以使用简单的数据类型.int  要比varchar在MySQL处理上简单 三.尽可能的使用not null  定义字段 四.尽量少 ...

  6. leetcode第31题--Longest Valid Parentheses

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  7. Scala是一门现代的多范式编程语言

    Scala是一门现代的多范式编程语言 Scala是一门现代的多范式编程语言,志在以简练.优雅及类型安全的方式来表达常用编程模式.它平滑地集成了面向对象和函数语言的特性. Scala是面向对象的:Sca ...

  8. 架构师Jack专访:全面认识软件测试架构师

    ◇ 测试架构师的职责 测试的职业通道基本是管理线和技术线两条路. 管理线主要的职责:更多是项目管理和资源管理. 技术线主要的职责:更多是技术管理和业务知识. 软件测试架构师更多就是技术线的带头人.管理 ...

  9. 【转】删除修改Eclipse里的SVN账户

    转自http://msongli.iteye.com/blog/1186648 引自: http://wanghongxu.iteye.com/blog/539806 http://jxdwuao.i ...

  10. QualityCenter的备份

    1.停止QC Server:2.备份Domain repository,它囊括每个项目的大量数据(包括自动化测试数据.附件.设置和格式表单等).要想知道某个项目所使用的数据库的名字,可以在Site A ...