持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
介绍
CSV(Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式,本文不对CSV 格式做过多介绍,不了解的XDM可以自己查询资料进行了解。python的CSV模块是python专门为处理CSV 文件出现的内置模块,可以帮助程序员们高效的处理CSV 格式的数据,也意味着我们在使用该模块的时候无需进行额外的安装。
该模块实现了对CSV 文件数据的读写功能,具体请参考下文的详细使用。
文件准备( myfile.csv )
"City name", "Area", "Population", "Annual Rainfall"
"Adelaide", 1295, 1158259, 600.5
"Brisbane", 5905, 1857594, 1146.4
"Darwin", 112, 120900, 1714.7
"Hobart", 1357, 205556, 619.5
"Sydney", 2058, 4336374, 1214.8
"Melbourne", 1566, 3806092, 646.9
"Perth", 5386, 1554769, 869.4
使用
reader(csvfile)
该方法会逐行的遍历csvfile ,但是csvfile 这个参数并不仅限于CSV文件,该参数可以是任何对象,只要这个对象是一个迭代器即可,并且调用这个迭代器的__next__()方法时可以返回一个自负床。比如说我们熟悉的文件对象、列表(元素必须是str )。
该方法返回的是csv.reader对象,可以进行for循环,将迭代器中的每个值放在一个列表中。
# 参数是非csv文件的迭代器对象
import csv
a = csv.reader("hello")
for i in a:
print(i) # ['h']['e']['l']['l']['o']
print(a) # <_csv.reader object at 0x0000026458B507C0>
# 文件对象
import csv
with open("myfile.csv", "r", encoding="utf8") as f:
csv_reader = csv.reader(f)
for i in csv_reader:
print(i) # 将每一行数据存放在列表中
DictReader(csvfile)
调用该类会得到一个csv.DiceReader对象,可以将csv文件中的每一行数据都映射到字典中,每一行数据就是一个字典,该方法只能在文件对象中使用,字典的key就是csv文件中的headers,value就是每一行的数据。
import csv
with open("myfile.csv", "r", encoding="utf8") as f:
csv_reader = csv.DictReader(f) # <csv.DictReader object at 0x000002703B84CDC0>
print(csv_reader)
for i in csv_reader:
print(i)
writer(csvfile)
该方法可以方便我们将数据写入到csv文件中,同样也支持非csv文件的文件对象使用,csvfile 这个参数代表任何具有write()方法的对象。
在向csv文件中写入数据的时候,可以分开headers(csv文件的表头)以及数据行,这样逻辑会更加的清楚。
import csv
header = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
("Perth", 5386, 1554769, 869.4),
("Perth", 5386, 1554769, 869.4)
]
with open("myfile.csv", "w", encoding="utf8", newline="") as f:
csv_writer = csv.writer(f)
csv_writer.writerow(header) # 写入单行数据
csv_writer.writerows(rows) # 写入多行数据
DictWriter(csvfile)
同样的,我们在向csv文件中写入数据时,除了使用上述writer()方法之外,还可以使用DictWriter,该方法支持使用字典向csv文件中写入数据。
import csv
header = ["City name", "Area", "Population", "Annual Rainfall"]
rows = [
{'City name': 'Perth', "Area": '5386', "Population": '1554769', "Annual Rainfall": '869.4'},
{'City name': 'Perth', "Area": '5386', "Population": '1554769', "Annual Rainfall": '869.4'}
] # 一行数据对应一个字典,多行数据放在一个列表中
with open("myfile.csv", "w", encoding="utf8", newline="") as f:
csv_writer = csv.DictWriter(f, header)
csv_writer.writeheader() # 写入header
csv_writer.writerows(rows) # 写入多行数据
补充
本文只介绍了csv模块常用的四个读写方法,其他更多的关于csv模块的方法可以参考官方文档docs.python.org/3/library/c…~