18.处理CSV文件

18.处理CSV文件

欢迎来到《10天学会Python》第9天第2篇文章!今天学习处理CSV文件,这是数据分析、办公自动化的重要基础。掌握了CSV操作,你就能轻松处理表格数据了!

核心概念

CSV(Comma-Separated Values,逗号分隔值)是一种简单的表格数据格式,广泛应用于Excel、数据库导出等场景。

《10天学会Python》的代码看

生活化比喻

想象CSV文件就像一张简易的Excel表格

  • 每行 = 表格的一行数据
  • 逗号 = 列与列之间的分界线
  • 表头 = 第一行的列标题
  • csv模块 = 专门处理这类表格的“智能工具箱”

CSV格式特点

  1. 简单通用:纯文本格式,任何文本编辑器都能打开
  2. 结构清晰:用逗号分隔不同列,用换行分隔不同行
  3. 兼容性好:可导入Excel、Google Sheets等表格软件

csv模块基本用法

Python内置的 csv模块专门处理CSV文件,主要功能:

  • csv.reader():读取CSV文件内容
  • csv.writer():写入数据到CSV文件
  • csv.DictReader():按字典形式读取(方便按列名访问)
  • csv.DictWriter():按字典形式写入

重要参数

  • newline='':防止写入时出现空行
  • encoding='utf-8':正确处理中文
  • delimiter=',':指定分隔符(默认逗号)

代码示例(5个生活场景)

示例1:读取学生成绩CSV并计算平均分

python

import csv

with open('scores.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)
    next(reader)  # 跳过表头
  
    total_score = 0
    count = 0
    for row in reader:
        score = float(row[2])  # 假设成绩在第3列
        total_score += score
        count += 1
  
    average = total_score / count if count > 0 else 0
    print(f"全班平均分:{average:.1f}")

示例2:写入商品库存CSV文件

python

import csv

products = [
    ['商品编号', '商品名称', '库存数量', '单价'],
    ['P001', 'Python编程书', 50, 69.9],
    ['P002', '无线鼠标', 30, 129.0],
    ['P003', '机械键盘', 20, 399.0]
]

with open('inventory.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerows(products)
  
print("库存文件已保存!")

示例3:处理包含中文的CSV文件(编码问题)

python

import csv

# 明确指定UTF-8编码(推荐)
with open('中文数据.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

# 处理未知编码文件
encodings = ['utf-8', 'gbk', 'gb2312']

for encoding in encodings:
    try:
        with open('未知编码.csv', 'r', encoding=encoding) as file:
            reader = csv.reader(file)
            for row in reader:
                print(row)
        print(f"成功使用 {encoding} 编码")
        break
    except UnicodeDecodeError:
        continue

示例4:使用DictReader/DictWriter处理带表头的CSV

python

import csv

# 读取:按字典方式(直接用列名访问)
with open('employees.csv', 'r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for employee in reader:
        print(f"{employee['姓名']},职位:{employee['职位']},工资:{employee['工资']}")

# 写入:按字典方式
new_employees = [
    {'姓名': '张三', '职位': '开发工程师', '工资': '15000'},
    {'姓名': '李四', '职位': '测试工程师', '工资': '12000'}
]

with open('new_employees.csv', 'w', newline='', encoding='utf-8') as file:
    fieldnames = ['姓名', '职位', '工资']
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()  # 写入表头
    writer.writerows(new_employees)

示例5:数据清洗示例(去除空行、处理异常值)

python

import csv

cleaned_data = []
with open('raw_data.csv', 'r', encoding='utf-8') as infile:
    reader = csv.reader(infile)
    for row in reader:
        # 跳过空行
        if not row or all(cell.strip() == '' for cell in row):
            continue
      
        # 处理异常成绩(0-100范围)
        if len(row) >= 3:
            try:
                score = float(row[2])
                if score < 0 or score > 100:
                    row[2] = '0'  # 设为0分
            except ValueError:
                row[2] = '0'  # 非数字设为0分
  
        cleaned_data.append(row)

# 保存清洗后的数据
with open('cleaned_data.csv', 'w', newline='', encoding='utf-8') as outfile:
    writer = csv.writer(outfile)
    writer.writerows(cleaned_data)
  
print(f"数据清洗完成!原始数据行,清洗后{len(cleaned_data)}行")

练习题

第1组:基础练习

目标:掌握CSV文件的基本读取操作

  1. 读取CSV文件并打印所有行
    • 创建一个 sample.csv文件,包含3-5行测试数据
    • 编写程序读取这个文件,并逐行打印内容
    • 要求:使用 csv.reader()with语句

第2组:应用练习

目标:学会对CSV数据进行统计分析

  1. 统计CSV文件中某列数据的总和与平均值
    • 使用示例1中的 scores.csv文件(或自己创建)
    • 编写程序计算某列(如成绩列)的:
      • 总和
      • 平均值
      • 最高分
      • 最低分
    • 要求:处理可能的空值和错误数据

第3组:综合练习

目标:综合运用CSV操作创建实用程序

  1. 实现简单的成绩管理系统
    • 功能要求:
      1. 读取现有成绩CSV文件
      2. 添加新学生成绩
      3. 修改指定学生的成绩
      4. 删除指定学生记录
      5. 保存修改到文件
    • 数据结构建议:学号,姓名,成绩
    • 提示:可以读取全部数据到列表,修改后再写回文件

总结

今天学习了Python处理CSV文件的核心技能:

核心概念

  1. CSV格式:逗号分隔的表格数据,简单通用
  2. csv模块:Python内置的CSV处理工具箱
  3. 编码处理:中文文件特别注意UTF-8编码

实用技巧

  1. 基础读写:csv.reader()csv.writer()
  2. 字典方式:csv.DictReader()csv.DictWriter()更直观
  3. 数据清洗:去除空行、处理异常值

掌握了CSV文件处理,你就具备了处理实际业务数据的基本能力!明天我们将进入第10天,完成一个综合项目实战。


学习建议

  1. 找一些真实的CSV数据文件进行练习
  2. 尝试将CSV数据转换为其他格式(如JSON)
  3. 思考如何用CSV文件管理个人数据
17.读写文本文件 2026-01-21
19.简单项目:天气查询脚本 2026-01-21

评论区