Python2中CSV文件中文乱码的成因与解决方案

不晚
不晚
发布时间:2026-10-16| 4人浏览过
原创

本文详细解析Python2中写入CSV文件出现中文乱码的根本原因,即Python内部Unicode与Windows系统GBK编码的差异。提供了两种解决方案:手动进行decode和encode转换,以及推荐使用codecs模块指定文件编码。通过具体代码示例,展示了如何正确写入单行和多行中文数据,确保中文在Excel中正常显示。

前言

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()

Python写入CSV文件时的乱码问题

今日在使用Python的csv库将数据写入CSV文件时,遇到了中文乱码问题。解决方法是在写入文件前,先指定utf-8编码,具体操作如下:

import csv
import codecs
if __name__ == "__main__":
    file_name = "data.csv"
    with open(file_name, "wb") as f:
        f.write(codecs.BOM_UTF8)
        csv_write = csv.writer(f)
        csv_write.writerows([["姓名", "年龄"], ["张三", 18]])

生成的CSV文件正确显示了中文内容。

至此,关于Python写入CSV文件时乱码问题的介绍到此结束。更多相关Python写入CSV文件乱码的内容,请搜索本站以前的文章或继续浏览下面的相关文章。希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。