Python csv模块

Python CSV模块完全指南

Python CSV模块完全指南

编程小白也能轻松理解的CSV文件处理知识

什么是CSV文件?

CSV(Comma-Separated Values)是一种简单的文件格式,用来存储表格数据(如电子表格或数据库)。

想象一下Excel表格,CSV就是去掉所有格式(颜色、字体等)只保留数据的”简化版Excel”。

通俗解释:

把CSV文件想象成一本笔记本:

  • 每一行 = 笔记本的一行
  • 每个逗号 = 列之间的分隔线
  • 没有复杂的格式,只有纯文本
# 一个简单的CSV文件内容示例:
姓名,年龄,城市
张三,25,北京
李四,30,上海
王五,28,”广州,广东” # 注意:当数据本身包含逗号时,需要用引号包裹

为什么使用CSV模块?

Python内置了csv模块,专门用于处理CSV文件。相比手动处理(用字符串分割split(‘,’)),使用csv模块:

手动处理的问题 csv模块的解决方案
数据中包含逗号会被错误分割 自动处理带引号的字段
不同操作系统换行符不同 自动处理换行符差异
需要自己处理编码问题 提供编码参数处理不同字符
处理复杂CSV格式很麻烦 提供多种读取/写入方式

重要提示: 对于简单的CSV文件,手动处理可能可行,但使用csv模块更专业、更安全、更省心!

读取CSV文件

基本步骤:

  1. 打开CSV文件
  2. 创建csv.reader对象
  3. 遍历读取每一行
  4. 处理数据
  5. 关闭文件
import csv

# 1. 打开CSV文件(注意使用正确的编码)
with open(‘data.csv’, ‘r’, encoding=‘utf-8’) as file:
    # 2. 创建CSV读取器
    csv_reader = csv.reader(file)
    
    # 3. 遍历每一行
    for row in csv_reader:
        # 4. 处理数据(每行是一个列表)
        print(row) # 例如:[‘姓名’, ‘年龄’, ‘城市’]
# 5. 文件会自动关闭(with语句的功劳)

重要提示: 使用with open()语句可以确保文件在使用后自动关闭,避免忘记关闭文件导致资源泄露!

写入CSV文件

基本步骤:

  1. 打开文件(写模式)
  2. 创建csv.writer对象
  3. 写入数据(单行或多行)
  4. 关闭文件
import csv

# 准备要写入的数据
data = [
    [‘姓名’, ‘年龄’, ‘城市’],
    [‘张三’, ’25’, ‘北京’],
    [‘李四’, ’30’, ‘上海’],
    [‘王五’, ’28’, ‘广州’]
]

with open(‘output.csv’, ‘w’, newline=, encoding=‘utf-8’) as file:
    # 创建CSV写入器
    csv_writer = csv.writer(file)
    
    # 写入所有数据
    csv_writer.writerows(data)
    
    # 也可以逐行写入:
    # csv_writer.writerow([‘赵六’, ’35’, ‘深圳’])

技巧: 在open()函数中添加参数newline=”可以避免在Windows系统上出现多余空行。

处理带标题行的CSV

当CSV文件包含标题行(第一行是列名)时,使用DictReader和DictWriter更方便:

DictReader(读取为字典)

import csv

with open(‘data_with_header.csv’, ‘r’, encoding=‘utf-8’) as file:
    # 创建字典读取器
    csv_dict_reader = csv.DictReader(file)
    
    for row in csv_dict_reader:
        # 每行是一个字典,可通过列名访问
        print(f”姓名: {row[‘姓名’]}, 年龄: {row[‘年龄’]}, 城市: {row[‘城市’]}”)

DictWriter(写入字典数据)

import csv

# 准备数据(字典列表)
data = [
    {‘姓名’: ‘张三’, ‘年龄’: ’25’, ‘城市’: ‘北京’},
    {‘姓名’: ‘李四’, ‘年龄’: ’30’, ‘城市’: ‘上海’}
]

with open(‘output_with_header.csv’, ‘w’, newline=, encoding=‘utf-8’) as file:
    # 定义CSV的列名
    fieldnames = [‘姓名’, ‘年龄’, ‘城市’]
    
    # 创建字典写入器
    csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    
    # 写入标题行
    csv_dict_writer.writeheader()
    
    # 写入数据
    csv_dict_writer.writerows(data)

优势: 使用字典方式访问数据,代码可读性更好,列顺序变化也不影响程序!

高级技巧与注意事项

自定义分隔符

不是所有CSV文件都用逗号分隔!有时会使用分号、制表符或其他字符。

# 读取用分号分隔的文件
with open(‘semicolon.csv’, ‘r’) as file:
    csv_reader = csv.reader(file, delimiter=‘;’)

# 写入用制表符分隔的文件(TSV)
with open(‘tab_separated.tsv’, ‘w’, newline=) as file:
    csv_writer = csv.writer(file, delimiter=‘\t’)

处理引号和特殊字符

当数据包含逗号、引号或换行符时,csv模块会自动处理:

# 读取时处理引号
csv_reader = csv.reader(file, quoting=csv.QUOTE_MINIMAL)

# 写入时强制所有字段加引号
csv_writer = csv.writer(file, quoting=csv.QUOTE_ALL)

# 使用不同的引号字符
csv_writer = csv.writer(file, quotechar=“‘”)

处理不同编码

中文或其他非英文字符需要特别注意文件编码:

# 读取UTF-8编码文件
with open(‘chinese.csv’, ‘r’, encoding=‘utf-8’) as file:
    # 处理文件…

# 读取GBK编码文件(常见于中文Windows)
with open(‘chinese_gbk.csv’, ‘r’, encoding=‘gbk’) as file:
    # 处理文件…

常见错误: 遇到UnicodeDecodeError错误时,通常是文件编码设置错误!尝试使用’utf-8’、’gbk’或’latin-1’。

© 2023 Python CSV模块指南 | 编程小白友好版 | 建议结合实践学习

提示:实际编码时,记得根据你的文件路径和内容调整示例代码

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部