Python 读写 CSV 文件实战

Python 读写 CSV 文件

1. CSV 文件介绍:轻量级的数据中转站

CSV (Comma Separated Values) 全称“逗号分隔值”,是一种简单且通用的文件格式。在 Daoman Python AI 的实际工程中,它常被用于数据库数据的导入导出、异构系统间的数据交换以及机器学习数据集的存储。

由于 CSV 是纯文本文件,它具有极强的跨平台兼容性。无论是在 Excel 电子表格中直接编辑,还是在 Python 程序中批量处理,CSV 都表现得游刃有余。

CSV 文件的核心特点:

  1. 纯文本属性:使用常见的字符集(如 UTF-8、GBK 等)存储。
  2. 记录导向:由一行行记录组成,通常每行代表一条完整的数据。
  3. 字段分隔:每条记录内部由分隔符(逗号、分号或制表符 \t)拆分为列。
  4. 结构一致性:每条记录通常拥有相同的字段序列和含义。

2. 将数据写入 CSV 文件

假设我们需要将一份包含学生三门功课成绩的数据保存为 scores.csv。在 Python 中,我们利用标准库 csv 模块中的 writer 函数来实现。

基础写入示例:

import csv
import random

# 建议在 open 中指定 newline='' 避免在 Windows 平台产生多余空行
with open('scores.csv', 'w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    # 写入表头(标题行)
    writer.writerow(['姓名', '语文', '数学', '英语'])
    
    names = ['关羽', '张飞', '赵云', '马超', '黄忠']
    for name in names:
        # 随机生成 50 到 100 之间的成绩
        scores = [random.randrange(50, 101) for _ in range(3)]
        scores.insert(0, name)
        # 写入一行记录
        writer.writerow(scores)

进阶控制:方言与自定义格式

csv.writer 函数支持丰富的参数,用于处理复杂的格式需求:

  • delimiter:指定分隔符(如改为 |)。
  • quoting:控制包围符。例如 csv.QUOTE_ALL 会给所有字段加上双引号,有效避免字段内容包含分隔符时产生的二义性。

3. 从 CSV 文件读取数据

读取 CSV 数据同样简单。通过 csv.reader 函数创建的对象是一个迭代器,我们可以逐行提取数据。

import csv

with open('scores.csv', 'r', encoding='utf-8') as file:
    # 如果写入时用了特殊分隔符,读取时也必须指定一致
    reader = csv.reader(file)
    for data_list in reader:
        # reader.line_num 可以获取当前行号
        print(f"行号 {reader.line_num}:", end='\t')
        for elem in data_list:
            print(elem, end='\t')
        print()

技术细节:在 for 循环中,每次迭代取出的 data_list 都是一个字符串列表,包含了该行所有的列数据。


4. 总结与前瞻

虽然 Python 原生的 csv 模块已经足够应对日常开发,但在 Daoman Python AI 涉及的大规模数据分析场景中,我们往往会祭出“核武器”——Pandas

  • Pandas 的威力:它提供了 read_csv()to_csv() 函数。
  • DataFrame 对象read_csv() 会将数据直接转换为 DataFrame。这是一种极其强大的二维表结构,支持一行代码完成数据清洗、聚合统计和缺失值处理。
  • 性能优势:对于数十万甚至百万行级别的 CSV 文件,Pandas 的处理速度和便捷性远超原生的 csvwriter