zoukankan      html  css  js  c++  java
  • 使用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可以的原因。
  • 相关阅读:
    Run
    axios+Qs请求数据转表单格式
    Vue开发电子书app
    vue2.5开发去哪儿了流程
    ES6重度学习 demo实例
    JS 数组, 对象的增查改删(多语法对比)
    格式化时间戳的n种方法
    Vue中你忽略的点
    vscode代码格式化
    分隔符
  • 原文地址:https://www.cnblogs.com/gaoxing/p/4918134.html
Copyright © 2011-2022 走看看