Python CSV 读写操作指南:从基础遍历到字典写入
本文总结 Python 中处理 CSV 文件的核心方法。通过 csv.reader 遍历读取数据,利用 csv.writer 进行列表写入,并掌握 csv.DictWriter 处理字典数据的技巧。重点解析写入时 newline='' 的作用、覆盖与追加模式的区别,以及常见空行问题的解决方案,帮助开发者高效处理结构化数据。
读取 CSV 数据
在 Python 中处理 CSV 文件时,csv.reader 是最常用的读取工具。它接受一个文件对象或列表作为输入,并返回一个可迭代的对象。这意味着我们需要通过循环(如 for 循环)来逐行获取数据。每一行数据在读取后会被转换为一个列表(list),方便后续处理。
以下是读取 CSV 文件的基本示例:
import csv
path = "C:\\Users\\A539\\Desktop\\1.csv"
with open(path, 'r') as fp:
lines = csv.reader(fp)
for line in lines:
print(line)
print(type(line))

上述代码展示了如何打开文件、创建 reader 对象并遍历每一行。注意,type(line) 的输出将显示为 <class 'list'>,这确认了每行数据是以列表形式存在的。

写入 CSV 数据
写入 CSV 文件主要涉及两个类:csv.writer 和 csv.DictWriter。在使用 csv.writer 时,有一个关键参数需要注意:newline=''。如果不添加此参数,在某些操作系统(如 Windows)上,写入的每一行之间可能会产生额外的空行。
使用 csv.writer 写入列表
csv.writer 适用于将列表数据写入 CSV 文件。它可以写入单行或多行数据。
import csv
list1 = [100, 200, 300, 400, 500]
list2 = [[500, 600, 700, 800, 900],
[50, 60, 70, 80, 90]]
with open(path, 'w',newline='')as fp:
writer = csv.writer(fp)
# 写入一行
writer.writerow(list1)
# 写入多行
writer.writerows(list2)

在上面的代码中,writerow 用于写入单个列表,而 writerows 用于写入包含多个列表的二维列表。这种模式适合结构简单的数据写入。
使用 csv.DictWriter 写入字典
当数据以字典形式存储时,csv.DictWriter 更加便捷。它需要指定字段名(fieldnames),通常对应字典的键。
import csv
head = ['aa', 'bb', 'cc', 'dd', 'ee']
lines = [
{'aa': 10 , 'bb': 20, 'cc': 30, 'dd': 40, 'ee': 50},
{'aa': 100, 'bb': 200, 'cc': 300, 'dd': 400, 'ee': 500},
{'aa': 1000, 'bb': 2000, 'cc': 3000, 'dd': 4000, 'ee': 5000},
{'aa': 10000, 'bb': 20000, 'cc': 30000, 'dd': 40000, 'ee': 50000},
]
with open(path, 'w',newline='')as fp:
dictwriter = csv.DictWriter(fp, head)
dictwriter.writeheader()

注意,在使用 DictWriter 时,必须先调用 writeheader() 写入表头,然后再写入数据行。否则,第一行数据可能会被误认为是表头,或者导致列名不匹配。
with open(path, 'w', newline='')as fp:
dictwriter = csv.DictWriter(fp, head)
dictwriter.writeheader()
dictwriter.writerows(lines)

处理覆盖与追加模式
默认情况下,使用 'w' 模式打开文件会覆盖原有内容。如果希望在不覆盖原有数据的情况下添加新内容,可以使用 'a+' 模式。然而,在使用 DictWriter 时,如果文件已存在且包含表头,再次调用 writeheader() 可能会导致表头重复写入。
因此,在追加模式下,通常只调用 writerows 来添加新数据行,而跳过 writeheader()。以下是追加模式的示例:
with open(path, 'a+', newline='')as fp:
dictwriter = csv.DictWriter(fp, head)
dictwriter.writeheader()
dictwriter.writerows(lines)

在实际应用中,建议先检查文件是否为空,再决定是否写入表头,以避免数据冗余。
总结
Python 的 csv 模块提供了强大的功能来处理 CSV 文件。通过合理使用 csv.reader、csv.writer 和 csv.DictWriter,可以高效地读取和写入数据。注意 newline='' 的使用以及覆盖与追加模式的区别,可以避免常见的数据格式问题。
以上就是 Python CSV 读写操作的详细内容,更多关于 Python 数据处理、CSV 模块用法及文件操作技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









