使用python进行数据转码
大数据最烦的就是数据质量差,为了把数据导入到sequoiadb中,需要要求文本是UTF-8模式的,使用enca查看文件编码是gb2312,然后是enca转utf-8报错。google了整个地球都不知道原因,尝试使用python进行转码
# -*- coding: utf-8 -*- import codecs import sys print "文件名:", sys.argv[1] filename = sys.argv[1] if( filename == None ): exit(1) file = open(filename) writefile = open(filename+"utf8","w+") bom = file.read(3) if( bom == codecs.BOM_UTF8 ): file.seek(3) for a in file: writefile.write(a.decode("gb2312","ignore").encode("utf-8")) file.close() writefile.close()
这里说明两点:
1:for line in file 是python读取大文件比较快速的方法
2:上面代码转码时报错:UnicodeDecodeError: ‘gb2312’ codec can’t decode bytes in position 2-3: illegal multibyte sequence
第二个问题:writefile.write变成print没有这个问题,但是一write就有问题,很费解,后来网上找了一个文章说:处理的字符的确是gb2312的,但是其中夹杂的部分特殊字符在gb2312里面找不到相关的映射转成Unicode,可以使用GB18030,他是GB2312的超集,包含很多特殊字符是gb2312没有的,改成gb18030可以了。
但是依旧没有解决为什么print可以的原因。