国庆节10月1日
--


CSV 是逗号分隔值的表格文件格式:手写方式与 csv.DictWriter/DictReader 两种读写方法

CSV:(Comma-Separated Values,逗号分隔值),是一种简单、通用的文本文件格式,用于存储表格数据,可以直接使用 Excel 打开。
爬虫抓到的数据通常就存成 CSV。
把每一行当成普通字符串写,列之间用逗号分隔:
1with open("csv_data/01.csv", "w", encoding="utf-8") as f:2 f.write("姓名,年龄,性别,爱好\n") # 先写表头3 f.write("小王,18,男,'football,Java'\n") # 再一行一行写数据4 f.write("小李,18,女,Python\n")5
6# 读:按行读出来即可7with open("csv_data/01.csv", "r", encoding="utf-8") as f:8 for line in f:9 print(line.strip())原始方式的坑:如果某个值自己带逗号(如爱好 football,Java),会把一行的列数弄乱,只能靠加引号手动规避——所以推荐方式二。
1import csv2
3# 写4with open("csv_data/02.csv", "w", encoding="utf-8", newline="") as f:5 writer = csv.DictWriter(f, fieldnames=["姓名", "年龄", "性别", "爱好"])6 writer.writeheader() # 写入表头7 writer.writerow({"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"})8 writer.writerow({"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"})9
10# 读11with open("csv_data/02.csv", "r", encoding="utf-8") as f:12 reader = csv.DictReader(f)13 for row in reader:14 print(row) # 每行是一个字典,如 {'姓名': '小王', '年龄': '18', ...}| 要点 | 说明 |
|---|---|
newline="" | 写 CSV 必须加:避免 Windows 下每行之间多出空行 |
csv.DictWriter(f, fieldnames=...) | 按字典写入,fieldnames 指定列名和顺序 |
writer.writeheader() | 写入表头(就是 fieldnames 那一行) |
writer.writerow(字典) | 写一行;writer.writerows(列表) 一次写多行 |
csv.DictReader(f) | 按字典读,第一行自动当表头,每行是 {列名: 值} |
csv 模块按字典读写newline="",否则 Windows 下行与行之间会多出空行writer.writeheader() 写表头;writer.writerow(字典) 写一行;writer.writerows(列表) 一次写多行DictReader,第一行自动当表头 2-1 原始方式写 CSV
不用 csv 模块:用文件操作把表头 + 3 行学生数据写进 students_raw.csv。
一级 · 思路:一行一个字符串,列之间用逗号,行尾加换行
二级 · 方法:open(..., "w") + f.write(...)
三级 · 骨架:f.write("姓名,年龄,性别\____")
1# 2-1 原始方式2with open("students_raw.csv", "w", encoding="utf-8") as f:3 f.write("姓名,年龄,性别,爱好\n")4 f.write("小王,18,男,'football,Java'\n")5 f.write("小李,18,女,Python\n")6 f.write("小张,18,男,C++\n") 2-2 DictWriter 写 + DictReader 读
用 csv 模块把 3 个学生(含一个爱好带逗号的)写入 students.csv,再读回来打印每一行。
一级 · 思路:写用 DictWriter(先 writeheader),读用 DictReader
二级 · 方法:csv.DictWriter / writerow / csv.DictReader
三级 · 骨架:with open(..., "w", encoding="utf-8", newline="") as f:
1import csv2
3students = [4 {"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"},5 {"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"},6 {"姓名": "小张", "年龄": 18, "性别": "男", "爱好": "C++"},7]8
9# 2-2 / 2-3 csv 模块(writerows 一次写多行)10with open("students.csv", "w", encoding="utf-8", newline="") as f:11 writer = csv.DictWriter(f, fieldnames=["姓名", "年龄", "性别", "爱好"])12 writer.writeheader()13 writer.writerows(students)14
15with open("students.csv", "r", encoding="utf-8") as f:16 for row in csv.DictReader(f):17 print(row)2-3 批量写入 把一个包含 3 个学生字典的列表,用 一次调用 全部写入 CSV。
一级 · 思路:DictWriter 有一个方法就是”写多行”
二级 · 方法:writer.writerows(列表)(一次写多行)
三级 · 骨架:writer.____(students)
1import csv2
3students = [4 {"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"},5 {"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"},6 {"姓名": "小张", "年龄": 18, "性别": "男", "爱好": "C++"},7]8
9# 2-2 / 2-3 csv 模块(writerows 一次写多行)10with open("students.csv", "w", encoding="utf-8", newline="") as f:11 writer = csv.DictWriter(f, fieldnames=["姓名", "年龄", "性别", "爱好"])12 writer.writeheader()13 writer.writerows(students)14
15with open("students.csv", "r", encoding="utf-8") as f:16 for row in csv.DictReader(f):17 print(row)如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


