解决python中csv模块保存数据中文编码问题

”’利用python的csv模块将数据库查询到的结果保存到csv文件中
MySQLdb模块
csv模块
”’

-- coding:utf-8 --

import MySQLdb
import csv
import codecs

打开数据库

db = MySQLdb.connect(host=’localhost’,user=’root’,passwd=’19940405’,db=’S_T’,charset=’utf8’)

使用cursor()获取数据库游标

cursor = db.cursor()

创建sql语句

sql = ”’
SELECT *
FROM Student
”’
cursor.execute(sql)
content = cursor.fetchall()
data = []
temp = []
for line in content:
for i in line:
temp.append(i)
for con in range(0,len(temp),5):
t = (temp[con].encode(‘gbk’),temp[con+1].encode(‘gbk’),temp[con+2].encode(‘gbk’),temp[con+3],temp[con+4].encode(‘gbk’))
data.append (t)

令人无解的编码问题困扰了我半天,对中文真心不友好

with open(‘csv_datavase4.csv’,’wb’) as csvfile:
writer = csv.writer(csvfile)
#writer.writerow([‘学号’,’姓名’,’性别’,’年龄’,’专业’])
add = [u’学号’.encode(‘gbk’),u’姓名’.encode(‘gbk’),u’性别’.encode(‘gbk’),u’年龄’.encode(‘gbk’),u’专业’.encode(‘gbk’)]
#这里也是一样,单独写入到没这么麻烦,与注释部分一样
writer.writerow(add)
writer.writerows(data)
print u’写入完毕’

### Python 读取 CSV 文件乱码解决方案 当在 Python 中读取 CSV 文件时出现乱码问题,通常是由于文件的编码格式与 Python 默认使用的编码格式不匹配引起的。以下是几种常见的解决办法: #### 方法一:调整 `open()` 函数中的编码参数 可以通过设置 `encoding` 参数为 `'utf-8-sig'` 来解决问题。这种方式适用于大多数带有 BOM(字节顺序标记)的 UTF-8 编码文件[^1]。 ```python with open('example.csv', 'r', encoding='utf-8-sig') as file: content = file.readlines() for line in content: print(line.strip()) ``` --- #### 方法二:使用 `codecs` 模块处理特殊编码 如果需要更灵活地控制编码方式,可以借助 Python 自带的 `codecs` 模块。这种方法特别适合于需要兼容多种编码格式的场景[^2]。 ```python import codecs f = codecs.open('example.csv', 'r', encoding='utf-8-sig') reader = csv.reader(f) for row in reader: print(row) f.close() ``` 此处的关键在于指定了 `utf-8-sig` 编码,它能够自动跳过可能存在的 BOM 字符`\ufeff`[^5]。 --- #### 方法三:利用 Pandas 处理大文件或复杂数据结构 对于更加复杂的 CSV 文件操作,推荐使用 Pandas 库。Pandas 支持直接指定编码格式,并且提供了强大的数据分析功能[^3]。 ```python import pandas as pd df = pd.read_csv('example.csv', encoding='utf-8-sig') print(df.head()) ``` 通过上述代码,不仅可以轻松解决乱码问题,还能够快速查看和处理数据帧的内容。 --- #### 方法四:检测并转换未知编码格式 假如不确定目标 CSV 文件的确切编码类型,则可以先探测其真实编码再做相应修改。第三方库 chardet 或 cchardet 能够帮助完成这项任务[^4]。 ```python import chardet raw_data = open('unknown_encoding.csv', 'rb').read() result = chardet.detect(raw_data) encoding = result['encoding'] if encoding is not None and encoding.lower().startswith('utf'): df = pd.read_csv('unknown_encoding.csv', encoding=f'{encoding}-sig') else: df = pd.read_csv('unknown_encoding.csv', encoding=encoding) print(df.head()) ``` 此段脚本首先尝试识别原始文件的实际编码形式,随后依据结果动态设定合适的解码选项。 --- ### 总结 针对 Python 在读取 CSV 文件过程中产生的乱码现象,主要原因是源文件采用了不同于预期的标准字符集表示法。因此,在实际开发工作中应当注意明确了解所涉及文档的具体编码属性,并采取恰当措施予以纠正。以上列举了几种常见而有效的应对策略供参考选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值