Python库:CSV
csv中4个常用对象:
csv.reader
:以列表的形式返回读取的数据。csv.writer
:以列表的形式写入数据。csv.DictReader
:以字典的形式返回读取的数据。csv.DictWriter
:以字典的形式写入数据。
读取CSV文件
读取内容如下:
文件第一行为header,从第二行开始是数据。
使用csv.reader读取数据
# 导入 csv 库
import csv
# 以读的方式打开文件
with open('data.csv', mode='r', encoding='utf-8-sig') as file:
reader = csv.reader(file) # 创建csv.reader实例
header = next(reader) # 获取第一行的header,并且在接下来的row中不会再包含header
for row in reader:
print(f'{header[0]}: {row[0]}, {header[1]}: {row[1]}, {header[2]}: {row[2]}')
运行结果如下:
影片名: 肖申克的救赎, 评分: 9.7, 评价人数: 2874828
影片名: 霸王别姬, 评分: 9.6, 评价人数: 2123836
影片名: 阿甘正传, 评分: 9.5, 评价人数: 2145432
影片名: 泰坦尼克号, 评分: 9.5, 评价人数: 2171661
影片名: 这个杀手不太冷, 评分: 9.4, 评价人数: 2281227
使用csv.DictReader
读取数据
# 导入csv库
import csv
with open('douban_data.csv', mode='r', encoding='utf-8-sig') as file:
reader = csv.DictReader(file) # 创建一个csv.DictReader实例,以字典的形势读取文件中每一行的数据,键为header值为对应的数据
for row in reader:
print(f'影片名:{row["影片名"]},评分:{row["评分"]}, 评价人数:{row["评价人数"]}')
运行结果如下:
影片名:肖申克的救赎,评分:9.7, 评价人数:2874828
影片名:霸王别姬,评分:9.6, 评价人数:2123836
影片名:阿甘正传,评分:9.5, 评价人数:2145432
影片名:泰坦尼克号,评分:9.5, 评价人数:2171661
影片名:这个杀手不太冷,评分:9.4, 评价人数:2281227
写入csv文件
假设我们现在要把数据保存到如下的csv文件中
使用csv.writer
写入数据
# 导入 csv 库
import csv
header_list = ['影片名', '评分', '评价人数']
data_list = [
['肖申克的救赎', '9.7', '2875474'],
['霸王别姬', '9.6', '2124240'],
['阿甘正传', '9.5', '2145856'],
['泰坦尼克号', '9.5', '2172139'],
['这个杀手不太冷', '9.4', '2281599']
]
with open('data.csv', mode='w', encoding='utf-8-sig', newline='') as file: # 若不加上newline=''则在文件中每一行下面都会加上空白行
writer = csv.writer(file)
# 写入 header,writerow()一次只能写入一行
writer.writerow(header_list)
# 写入数据,writerows() 一次可写入多行
writer.writerows(data_list)
使用csv.DictWriter
写入数据
# 导入 csv 库
import csv
header_list = ['影片名', '评分', '评价人数']
data_list = [
{'影片名': '肖申克的救赎', '评分': '9.7', '评价人数': '2875474'},
{'影片名': '霸王别姬', '评分': '9.6', '评价人数': '2124240'},
{'影片名': '阿甘正传', '评分': '9.5', '评价人数': '2145856'},
{'影片名': '泰坦尼克号', '评分': '9.5', '评价人数': '2172139'},
{'影片名': '这个杀手不太冷', '评分': '9.4', '评价人数': '2281599'}
]
header_list = ['影片名', '评分', '评价人数']
with open('data.csv', mode='w', encoding='utf-8-sig', newline='') as file: # 若不加上newline=''则在文件中每一行下面都会加上空白行
writer = csv.DictWriter(file, header_list) # 创建csv.DictWriter实例,并将header列表作为参数传入
# 写入 header
writer.writeheader()
# 写入数据
writer.writerows(data_list)