Python写入CSV文件:编码处理与pandas批量写入实战
本文详解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文件的核心要点,希望对读者的学习或工作有所助益。如有任何疑问,欢迎留言交流,感谢对本站的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













