python生成csv中文乱码的问题

本文介绍了一种在使用Python向CSV文件写入中文时避免乱码的方法。通过添加BOM_UTF8标记,解决了Linux环境下输出的CSV文件在Windows中打开时出现中文乱码的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

在Linux下面用python进行数据处理,然后输出为csv格式,如果没有中文一切正常,但是如果有中文,就会出现乱码的问题,本篇将讲述怎么处理这个问题

二、处理过程

原始代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import csv
#import codecs
with open('test.csv', 'wb') as csvfile:
#    csvfile.write(codecs.BOM_UTF8)
    spamwriter = csv.writer(csvfile, dialect='excel')
    spamwriter.writerow(['测试'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

运行以后:
Linux下的效果

[root@lab8106 ~]# cat test.csv 
测试,测试,测试,测试,测试,Baked Beans
Spam,Lovely Spam,Wonderful Spam

Windows下打开的效果

修改代码

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import csv
import codecs
with open('test.csv', 'wb') as csvfile:
    csvfile.write(codecs.BOM_UTF8)
    spamwriter = csv.writer(csvfile, dialect='excel')
    spamwriter.writerow(['测试'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

跟上面的代码相比,引入了两行代码

import codecs
csvfile.write(codecs.BOM_UTF8)

我们再来看效果Linux下的效果

[root@lab8106 ~]# cat test.csv 
测试,测试,测试,测试,测试,Baked Beans
Spam,Lovely Spam,Wonderful Spam

Windows下打开的效果

问题解决

三、总结

网上找了一些资料,这个方式比较快而简单,就先用这个方式解决,方法有很多

四、变更记录

Why

Who When
创建 武汉-运维-磨渣 2016-09-28
这个问题,在我向csv写入中文时就出现,困扰了我一个晚上,通过上述方法将其解决,只需要添加两行代码,即可完成上述由中文乱码到中文的转换,方便易用。

### 解决 Python 输出 CSV 文件时中文字符显示为乱码的方法 #### 编码设置的重要性 当处理包含非ASCII字符的数据(如中文)并将其写入CSV文件时,选择合适的编码至关重要。UTF-8是一种广泛使用的多字节编码方式,能够很好地表示各种语言的文字。然而,在某些情况下,特别是对于Microsoft Excel这样的应用程序,默认的UTF-8可能无法正确解析这些特殊字符,从而导致乱码现象。 为了确保生成CSV文件能在Excel中正常查看,推荐使用带有BOM (Byte Order Mark) 的 UTF-8 编码——即 `utf-8-sig` 。这种编码会在文件开头加入几个不可见的标记位,帮助程序识别后续内容是以何种形式存储的[^2]。 #### 正确使用标准库 csv 模块 如果仅依赖于Python自带的标准库来创建CSV文件,则需要注意指定正确的编码参数: ```python import csv data = [['城市'], ['北京'], ['上海']] with open('cities.csv', mode='w', newline='', encoding='utf-8-sig') as file: writer = csv.writer(file) writer.writerows(data) print("CSV 文件已成功创建.") ``` 上述代码片段展示了如何利用Python内建的`csv`模块编写含有中文的城市名称到名为`cities.csv`的新文件里,并通过设定`encoding='utf-8-sig'`解决了潜在的乱码问题[^1]。 #### 利用 Pandas 库简化操作流程 除了官方提供的工具外,第三方库Pandas也提供了一种更简便的方式来处理表格型数据集。它不仅支持多种输入输出格式转换,还允许用户轻松调整导出过程中的细节配置项,比如编码类型等: ```python import pandas as pd df = pd.DataFrame({'城市': ['北京', '上海']}) df.to_csv('pandas_cities.csv', index=False, encoding='utf-8-sig') print("使用Pandas创建的CSV文件已完成.") ``` 这段脚本说明了怎样借助Pandas快速构建一个简单的DataFrame对象并将之保存成CSV文档,期间同样指定了适合Excel阅读器理解的编码方案。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值