CSV文件操作

CSV文件操作

2026年9月19日·#编程学习/python学习笔记Python/爬虫·918 字 5 分钟
浏览量加载中...
AI 摘要

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

CSV 是什么#

CSV:(Comma-Separated Values,逗号分隔值),是一种简单、通用的文本文件格式,用于存储表格数据,可以直接使用 Excel 打开。

爬虫抓到的数据通常就存成 CSV。

方式一:文件操作的原始方式#

把每一行当成普通字符串写,列之间用逗号分隔:

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 模块(推荐)#

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)按字典读,第一行自动当表头,每行是 {列名: 值}

相关#

练习题#

一、回忆填空(写完再展开对答案)#

  1. CSV 全称 ____,是一种用于存储 ____ 数据的文本文件格式,可以直接用 ____ 打开
  2. 原始方式的坑:值里自带 ____ 会把一行的列数弄乱
  3. 推荐用 ____ 模块按字典读写
  4. 写文件时必须加 newline="____",否则 Windows 下行与行之间会多出空行
  5. writer.____() 写表头;writer.____(字典) 写一行;writer.____(列表) 一次写多行
  6. 按字典读 CSV 用 ____,第一行自动当 ____
填空答案(做完再点开)
  1. Comma-Separated Values(逗号分隔值)/ 表格 / Excel 2. 逗号 3. csv 4. 空("") 5. writeheader / writerow / writerows 6. DictReader / 表头

二、裸写题#

  • 2-1 原始方式写 CSV 不用 csv 模块:用文件操作把表头 + 3 行学生数据写进 students_raw.csv

    提示(先自己想,实在想不出再点开)

    一级 · 思路:一行一个字符串,列之间用逗号,行尾加换行 二级 · 方法open(..., "w") + f.write(...) 三级 · 骨架f.write("姓名,年龄,性别\____")

  • 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:

  • 2-3 批量写入 把一个包含 3 个学生字典的列表,用 一次调用 全部写入 CSV。

    提示

    一级 · 思路:DictWriter 有一个方法就是”写多行” 二级 · 方法writer.____(学生列表) 三级 · 骨架writer.writerows(students)

参考答案(做完再点开)
import csv
students = [
{"姓名": "小王", "年龄": 18, "性别": "男", "爱好": "football,Java"},
{"姓名": "小李", "年龄": 18, "性别": "女", "爱好": "Python"},
{"姓名": "小张", "年龄": 18, "性别": "男", "爱好": "C++"},
]
# 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")
# 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)

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]