Python写入CSV文件:编码处理与pandas批量写入实战

小鹿同学
小鹿同学
发布时间:2026-10-13 | 2人浏览过
原创

本文详解Python写入CSV文件的两种核心方式。首先解析ASCII、GBK与UTF-8编码差异,解决中文写入乱码问题;其次演示标准库csv模块的逐行写入,并重点介绍利用pandas库进行高效批量数据写入的完整代码与安装步骤,适用于数据量较大的场景。

前言

在数据采集流程中,数据持久化是最后的关键环节。当数据规模未达到数据库承载阈值时,通常优先选择文件存储,如文本文件、CSV文件或xls文件。这类存储方式具备便携性强、查阅直观的优势。

Python作为高效的脚本语言,处理此类文件存储任务并非难事。然而,在实际操作中,若数据源包含中文字符,极易触发编码报错,这是开发者常遇到的棘手问题。

理解编码机制是解决问题的前提。常见的编码标准包括UTF-8、GBK以及ASCII等。

ASCII码诞生于20世纪60年代的美国,旨在规范英语字符与二进制位之间的对应关系。由于英语词汇结构相对简单,仅由26个字母组成,因此仅需一个字节即可表示一个字母符号。加上各类控制符号,128个字符足以满足其编码需求。

不同国家拥有独特的语言文字体系,且字符数量远超英语。据统计,汉字总数接近10万个,日常常用汉字约3000个。显然,ASCII编码无法覆盖此类需求。因此,中文通常采用GBK编码,通过两个字节表示一个汉字;简体中文的具体实现标准为GBK2312。

UTF-8编码源于Unicode标准。Unicode旨在统一全球各类编码标准,避免因“一种编码编码、另一种编码解码”导致的乱码现象。然而,Unicode仅定义了符号的二进制代码,未规定具体的存储方式。UTF-8则是互联网上应用最广泛的Unicode实现方案。

综上所述,将数据写入文件时,推荐明确指定编码格式为UTF-8,以确保数据的兼容性与准确性。

Python标准库提供了名为csv的模块,专门用于处理CSV文件的读写操作。

Python的csv模块封装了常用功能,其基础使用示例如下:

# 读取csv文件
import csv
with open('some.csv', 'rb') as f: # 采用b的方式处理可以省去很多问题
reader = csv.reader(f)
for row in reader:
# do something with row, such as row[0],row[1]


import csv
with open('some.csv', 'wb') as f: # 采用b的方式处理可以省去很多问题
writer = csv.writer(f)
writer.writerows(someiterable)

具体代码实现如下:

import csv
import codecs
# codecs 是自然语言编码转换模块

fileName = 'PythonBook.csv'

# 指定编码为 utf-8, 避免写 csv 文件出现中文乱码
with codecs.open(fileName, 'w', 'utf-8') as csvfile:
 # 指定 csv 文件的头部显示项
 filednames = ['书名', '作者']
 writer = csv.DictWriter(csvfile, fieldnames=filednames)

 books = []
 book = {
 'title': '笑傲江湖',
 'author': '金庸',
 }
 books.append(book)

 writer.writeheader()
 for book in books:
 try:
 writer.writerow({'书名':book['title'], '作者':book['author']})
 except UnicodeEncodeError:
 print("编码错误, 该数据无法写到文件中, 直接忽略该数据")

上述方法通过逐行写入CSV文件,执行效率相对较低。若需批量将大量数据写入CSV文件,建议引入pandas库以提升性能。

pandas属于第三方库,使用前需进行安装。通过pip命令进行安装是最为简便的方式。 pip install pandas

利用pandas进行批量数据写入的具体用法如下:

import pandas as pd

fileName = 'PythonBook.csv'
number = 1

books = []
book = {
 'title': '笑傲江湖',
 'author': '金庸',
}
# 如果 book 条数足够多的话,pandas 会每次往文件中写 50 条数据。
books.append(book)

data = pd.DataFrame(books)
# 写入csv文件,'a+'是追加模式
try:
 if number == 1:
 csv_headers = ['书名', '作者']
 data.to_csv(fileName, header=csv_headers, index=False, mode='a+', encoding='utf-8')
 else:
 data.to_csv('fileName, header=False, index=False, mode='a+', encoding='utf-8')
 number = number + 1
except UnicodeEncodeError:
 print("编码错误, 该数据无法写到文件中, 直接忽略该数据")

总结

以上内容涵盖了Python写入CSV文件的核心要点,希望对读者的学习或工作有所助益。如有任何疑问,欢迎留言交流,感谢对本站的支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表