CSV 是什么
CSV:(Comma-Separated Values,逗号分隔值),是一种简单、通用的文本文件格式,用于存储表格数据,可以直接使用 Excel 打开。
爬虫抓到的数据通常就存成 CSV。
方式一:文件操作的原始方式
把每一行当成普通字符串写,列之间用逗号分隔:
python
with open("csv_data/01.csv", "w", encoding="utf-8") as f:
f.write("姓名,年龄,性别,爱好\n") # 先写表头
f.write("小王,18,男,'football,Java'\n") # 再一行一行写数据
f.write("小李,18,女,Python\n")
# 读:按行读出来即可
with open("csv_data/01.csv", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())WARNING
原始方式的坑:如果某个值自己带逗号(如爱好 football,Java),会把一行的列数弄乱,只能靠加引号手动规避——所以推荐方式二。
方式二:csv 模块(推荐)
python
import csv
# 写
with open("csv_data/02.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["姓名", "年龄", "性别", "爱好"])
writer.writeheader() # 写入表头
writer.writerow({"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"})
writer.writerow({"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"})
# 读
with open("csv_data/02.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row) # 每行是一个字典,如 {'姓名': '小王', '年龄': '18', ...}| 要点 | 说明 |
|---|---|
newline="" | 写 CSV 必须加:避免 Windows 下每行之间多出空行 |
csv.DictWriter(f, fieldnames=...) | 按字典写入,fieldnames 指定列名和顺序 |
writer.writeheader() | 写入表头(就是 fieldnames 那一行) |
writer.writerow(字典) | 写一行;writer.writerows(列表) 一次写多行 |
csv.DictReader(f) | 按字典读,第一行自动当表头,每行是 {列名: 值} |
相关
练习题
一、知识回顾(读完直接做下面的实践题)
- CSV 全称 Comma-Separated Values(逗号分隔值),是一种用于存储表格数据的文本文件格式,可以直接用 Excel 打开
- 原始方式的坑:值里自带逗号会把一行的列数弄乱
- 推荐用
csv模块按字典读写 - 写文件时必须加
newline="",否则 Windows 下行与行之间会多出空行 writer.writeheader()写表头;writer.writerow(字典)写一行;writer.writerows(列表)一次写多行- 按字典读 CSV 用
DictReader,第一行自动当表头
二、裸写题
- 提示(先自己想,实在想不出再点开)
一级 · 思路:一行一个字符串,列之间用逗号,行尾加换行 二级 · 方法:
open(..., "w")+f.write(...)三级 · 骨架:f.write("姓名,年龄,性别\____")- 参考答案(做完再点开)
python# 2-1 原始方式 with open("students_raw.csv", "w", encoding="utf-8") as f: f.write("姓名,年龄,性别,爱好\n") f.write("小王,18,男,'football,Java'\n") f.write("小李,18,女,Python\n") f.write("小张,18,男,C++\n")- 提示(先自己想,实在想不出再点开)
一级 · 思路:写用 DictWriter(先 writeheader),读用 DictReader 二级 · 方法:
csv.DictWriter/writerow/csv.DictReader三级 · 骨架:with open(..., "w", encoding="utf-8", newline="") as f:- 参考答案(做完再点开)
pythonimport csv students = [ {"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"}, {"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"}, {"姓名": "小张", "年龄": 18, "性别": "男", "爱好": "C++"}, ] # 2-2 / 2-3 csv 模块(writerows 一次写多行) with open("students.csv", "w", encoding="utf-8", newline="") as f: writer = csv.DictWriter(f, fieldnames=["姓名", "年龄", "性别", "爱好"]) writer.writeheader() writer.writerows(students) with open("students.csv", "r", encoding="utf-8") as f: for row in csv.DictReader(f): print(row)- 提示(先自己想,实在想不出再点开)
一级 · 思路:DictWriter 有一个方法就是"写多行" 二级 · 方法:
writer.writerows(列表)(一次写多行) 三级 · 骨架:writer.____(students)- 参考答案(做完再点开)
pythonimport csv students = [ {"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"}, {"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"}, {"姓名": "小张", "年龄": 18, "性别": "男", "爱好": "C++"}, ] # 2-2 / 2-3 csv 模块(writerows 一次写多行) with open("students.csv", "w", encoding="utf-8", newline="") as f: writer = csv.DictWriter(f, fieldnames=["姓名", "年龄", "性别", "爱好"]) writer.writeheader() writer.writerows(students) with open("students.csv", "r", encoding="utf-8") as f: for row in csv.DictReader(f): print(row)
