使用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可以的原因。

转载于:https://www.cnblogs.com/gaoxing/p/4918134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值