zoukankan      html  css  js  c++  java
  • Python在向CSV文件写中文时乱码的处理办法

    前言

    python2最大的坑在于中文编码问题,遇到中文报错首先加u,再各种encode、decode。
    当list、tuple、dict里面有中文时,打印出来的是Unicode编码,这个是无解的。
    对中文编码纠结的建议尽快换python3吧,python2且用且珍惜!

    csv中文乱码

    1.open打开csv文件,用writer写入带有中文的数据时

    • writer写入单行
    • writers写入多行
    # coding:utf-8
    import csv
    
    f = open("xieru.csv", 'wb')
    writer = csv.writer(f)
    
    # 需要写入的信息
    data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]
    
    writer.writerow(data)       # 写入单行
    # writer.writerows(datas)    # 写入多行
    
    f.close()

    2.打开csv文件,发现写入的中文乱码了

    编码与解码

    1.中文乱码问题一直是python2挥之不去的痛,这里先弄清楚乱码原因:

    • python2本身内部代码的编码有str和unicode两种编码
    • 然而文件写入到windows系统时候,windows上的是gb2312编码

    所以就导致了乱码问题

    2.先把python里面的中文字符串decode成utf-8,再encode为gbk编码

    data.decode('utf-8').encode('gbk')

    3.如果是读取csv文件的话,就反过来:

    data.decode('gbk').encode('utf-8')

    解决方案

    1.方案一:对字符串转换编码(这个太麻烦了,不推荐)

    # coding:utf-8
    import csv
    
    f = open("xieru1.csv", 'wb')
    writer = csv.writer(f)
    
    # 需要写入的信息
    data = ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"]
    
    a = []
    for i in data:
        a.append(i.decode("utf-8").encode("gbk"))
    
    writer.writerow(a)           # 写入单行
    # writer.writerows(datas)    # 写入多行
    
    f.close()

    2.方法二:用codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode (推荐)

    # coding:utf-8
    import csv, codecs
    
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    f = codecs.open("xx.csv", 'wb', "gbk")
    writer = csv.writer(f)
    writer.writerow(["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"])
    
    # 多组数据存放list列表里面
    datas = [
        ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
        ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
        ["客户名称", "行业类型", "客户联系人", "职位", "联系方式", "邮箱","地址"],
           ]
    
    writer.writerows(datas)
    f.close()


    从悠悠处搬过来的。
  • 相关阅读:
    【面试题】面试题合集三
    【面试题】面试题合集二
    【面试易错题】陷阱题集一
    40个Java集合面试问题和答案
    java面试题全集(下)
    java面试题全集(中)
    java面试题全集(上)
    spring cloud基础教程
    spring boot基础学习教程
    DDD
  • 原文地址:https://www.cnblogs.com/phyger/p/9561283.html
Copyright © 2011-2022 走看看