欢迎来到《10天学会Python》第9天第2篇文章!今天学习处理CSV文件,这是数据分析、办公自动化的重要基础。掌握了CSV操作,你就能轻松处理表格数据了!
核心概念
CSV(Comma-Separated Values,逗号分隔值)是一种简单的表格数据格式,广泛应用于Excel、数据库导出等场景。
《10天学会Python》的代码看
生活化比喻
想象CSV文件就像一张简易的Excel表格:
- 每行 = 表格的一行数据
- 逗号 = 列与列之间的分界线
- 表头 = 第一行的列标题
- csv模块 = 专门处理这类表格的“智能工具箱”
CSV格式特点
- 简单通用:纯文本格式,任何文本编辑器都能打开
- 结构清晰:用逗号分隔不同列,用换行分隔不同行
- 兼容性好:可导入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文件的基本读取操作
- 读取CSV文件并打印所有行
- 创建一个
sample.csv文件,包含3-5行测试数据 - 编写程序读取这个文件,并逐行打印内容
- 要求:使用
csv.reader()和with语句
- 创建一个
第2组:应用练习
目标:学会对CSV数据进行统计分析
- 统计CSV文件中某列数据的总和与平均值
- 使用示例1中的
scores.csv文件(或自己创建) - 编写程序计算某列(如成绩列)的:
- 总和
- 平均值
- 最高分
- 最低分
- 要求:处理可能的空值和错误数据
- 使用示例1中的
第3组:综合练习
目标:综合运用CSV操作创建实用程序
- 实现简单的成绩管理系统
- 功能要求:
- 读取现有成绩CSV文件
- 添加新学生成绩
- 修改指定学生的成绩
- 删除指定学生记录
- 保存修改到文件
- 数据结构建议:学号,姓名,成绩
- 提示:可以读取全部数据到列表,修改后再写回文件
- 功能要求:
总结
今天学习了Python处理CSV文件的核心技能:
核心概念:
- CSV格式:逗号分隔的表格数据,简单通用
- csv模块:Python内置的CSV处理工具箱
- 编码处理:中文文件特别注意UTF-8编码
实用技巧:
- 基础读写:
csv.reader()和csv.writer() - 字典方式:
csv.DictReader()和csv.DictWriter()更直观 - 数据清洗:去除空行、处理异常值
掌握了CSV文件处理,你就具备了处理实际业务数据的基本能力!明天我们将进入第10天,完成一个综合项目实战。
学习建议:
- 找一些真实的CSV数据文件进行练习
- 尝试将CSV数据转换为其他格式(如JSON)
- 思考如何用CSV文件管理个人数据