每一次碰到 CSV 都需要单独搜一次做法,还经常出一些小 bug。这里对最简单的 CSV 读写做一个整理。

csv 存储的内容如:

1
2
3
4
5
6
[
{
'data': 2,
'index': 0
}, ...
]

读CSV

1
2
3
4
5
6
import csv

with open('example.csv', 'r', encoding='unicode_escape') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['data'], row['index'])

注意 unicode_esxape 是对文件中出现了奇怪字符使用的。如果使用 utf-8 仍不能正常解码的时候可以使用。

写CSV

1
2
3
4
5
6
7
8
9
10
11
12
import csv

fieldnames = ['data', 'index']
with open('example.csv', 'w', encoding = 'utf-8', newline = '') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(fieldnames)
writer.writerow([2, 0])

with open('example.csv', 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames)
writer.writeheader()
writer.writerow({'data': 2, 'index': 0})
  • 即第一次使用writerow时,需要先写入第一排域名,然后后面每一排则是根据域名排序的 list。
  • 使用字典和 list 是等价的,哪个方便用哪个。
  • 写入的时候一定不能标记为unicode_escape,否则会乱码。使用utf-8就 ok。
  • 需要加上newline = '',否则每一行后面会接一行空行。