Python CSV案例:从零掌握CSV表格读写全攻略
📖 目录导读
CSV文件基础认知
什么是CSV?
CSV(Comma-Separated Values,逗号分隔值)是一种纯文本格式,用逗号分隔字段,支持Excel、数据库和编程语言直接读写。

姓名,年龄,城市
张三,28,北京
李四,35,上海
为什么用Python处理CSV?
数据清洗、自动化报表、爬虫数据存储、迁移数据库等场景中,Python的csv模块和pandas库是行业标准工具,根据Web数据统计,超过70%的ETL任务依赖CSV格式。
问答环节
Q:CSV与Excel文件的本质区别是什么?
A:CSV是纯文本(可用记事本打开),不保存格式、公式、样式;Excel是二进制文件(.xlsx),包含元数据,Python中处理CSV更快,且跨平台兼容性更好。
Python操作CSV的三种核心方式
| 方式 | 适用场景 | 核心函数 |
|---|---|---|
csv 模块(内置) |
小规模数据、无需复杂处理 | csv.reader()、csv.writer() |
pandas 库 |
数据分析、清洗、转换 | pd.read_csv()、df.to_csv() |
| 原生文件处理 | 异常格式(如分号分隔) | file.read().split() |
提示:搜索引擎优化(SEO)要求内容结构清晰,使用表格和标题层级有助于爬虫理解页面逻辑。
案例一:基础读写实战
1 写入CSV文件
import csv
# 数据准备
headers = ['ID', '标题', '浏览量']
rows = [
[1, '如何学习Python', 2300],
[2, 'SEO基础技巧', 4100],
[3, '数据分析入门', 1800]
]
# 写入(自动处理引号、换行)
with open('articles.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(headers) # 写入表头
writer.writerows(rows) # 写入数据行
输出文件内容
1,如何学习Python,2300
2,SEO基础技巧,4100
3,数据分析入门,1800
2 读取CSV文件
with open('articles.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row_index, row in enumerate(reader):
if row_index == 0:
print(f"表头:{row}")
else:
print(f"第{row_index}行:ID={row[0]}, 标题={row[1]}, 浏览={row[2]}")
输出结果
表头:['ID', '标题', '浏览量']
第1行:ID=1, 标题=如何学习Python, 浏览=2300
第2行:ID=2, 标题=SEO基础技巧, 浏览=4100
问答环节
Q:为什么open()要指定newline=''?
A:在Windows系统中,如果省略该参数,写入时会出现空行,这是Python官方文档强调的兼容性优化。
案例二:处理复杂数据(含中文/特殊字符)
1 中文冲突问题
CSV文件中的中文乱码常因编码不统一导致。最佳实践:统一使用utf-8编码。
# 写入时指定编码
with open('product.csv', 'w', newline='', encoding='utf-8-sig') as f:
# utf-8-sig会添加BOM头,让Excel正确识别中文
writer = csv.writer(f)
writer.writerow(['商品', '价格', '描述'])
writer.writerow(['笔记本电脑', 5999, '第11代英特尔酷睿'])
注意:
utf-8-sig在文件开头插入字节顺序标记(BOM),Excel可正确显示中文;普通utf-8无BOM时,Excel会乱码。
2 字段含逗号/换行的处理
CSV用双引号包裹含特殊字符的字段:
row = ['"爆款"商品', 199, '支持"分期付款"\n24期免息'] # 自动转义为:"""爆款""商品",199,"支持""分期付款""\n24期免息"
读取时自动解析:
import csv
import io
text = '''"""爆款""商品",199,"支持""分期付款""\n24期免息"'''
reader = csv.reader(io.StringIO(text))
for row in reader:
print(row[0]) # 输出: "爆款"商品
案例三:大数据量CSV的流式处理
当CSV文件超过百MB甚至GB级别时,一次性读入会耗尽内存。使用生成器分块处理是SEO爬虫和数据分析的最佳实践。
import csv
def process_large_csv(file_path, chunk_size=1000):
with open(file_path, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
headers = next(reader) # 单独提取表头
chunk = []
for row in reader:
chunk.append(row)
if len(chunk) >= chunk_size:
yield chunk, headers
chunk = []
if chunk: # 处理最后不足chunk_size的部分
yield chunk, headers
# 使用示例
for chunk, headers in process_large_csv('huge_data.csv', 500):
print(f"处理了{len(chunk)}行数据")
# 在这里做业务逻辑:清洗、统计、写入数据库
性能对比
- 普通读取(
list(reader)):100MB文件需500MB内存- 流式读取(生成器):仅需1-10MB内存
- 搜索引擎爬虫会优先抓取页面中此类实用代码示例,提升用户停留时间
常见问题与避坑指南
1 分隔符不是逗号怎么办?
某些CSV文件使用分号、Tab(\t)或竖线(|)分隔,使用csv.reader()的delimiter参数:
with open('data.tsv', 'r') as f:
reader = csv.reader(f, delimiter='\t') # 制表符分隔
2 表头为空或缺失
# 读取时不指定表头
data = pd.read_csv('no_header.csv', header=None)
data.columns = ['col1', 'col2', 'col3'] # 手动命名
3 数值类型转换
CSV读入的字段全是字符串,需手动转换:
def safe_float(value):
try:
return float(value)
except ValueError:
return None
rows = [['1.5', '3', 'abc'], ['2.0', '5', 'def']]
for row in rows:
price = safe_float(row[0])
if price and price > 2:
print(price)
问答环节
Q:为什么我的CSV在Excel里显示乱码?
A:请确认:①文件保存为utf-8-sig编码;②Excel通过“数据→自文本”导入,并选择UTF-8编码。
SEO优化技巧:让CSV表格内容被搜索引擎抓取
1 结构化数据标记
在HTML中嵌入Schema标记,帮助Google识别表格内容:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Dataset",
"name": "商品价格案例数据",
"encodingFormat": "text/csv",
"distribution": {
"@type": "DataDownload",
"contentUrl": "https://example.com/data.csv"
}
}
</script>
2 内链与锚文本优化
- 在文章中使用关键词“Python CSV案例”作为锚文本,链接到本页面
- 在段落中自然融入长尾词:CSV表格读写实战、中文CSV乱码解决、大数据CSV流式处理
- 图片使用ALT标签,
<img src="csv-excel-comparison.jpg" >
3 页面加载速度
- 将CSV示例文件托管在CDN,避免阻塞页面渲染
- 使用懒加载技术:
<img loading="lazy"> - 减少HTTP请求:合并CSS/JS文件
4 用户互动设计
- 在文章末尾提供“下载完整案例代码”的按钮(对应域名替换为:
https://example.com/csv-demo) - 添加评论区,触发用户提问(如“为什么我的pandas读取CSV报错?”)可延长页面停留时间
📌 总结与下一步行动
通过本文,你已掌握:
- CSV文件的本质与Python三种操作方法
- 从基础写入读到大数据流式处理的完整案例
- 中文乱码、特殊字符、分块处理等实战难题
- 针对Google和Bing的SEO优化策略
立即动手:复制文章中的代码到本地运行,将你的数据导出为CSV格式,如果遇到问题,欢迎在评论区留言,我会在24小时内回复。
最后提醒:搜索引擎喜欢“新鲜、实用、深度”,在更新你的博客时,定期检查CSV案例的代码是否兼容最新Python版本(当前3.11+),并添加新需求的解决方案。