CSV 处理器
欢迎来到你的真实世界毕业特训。
在之前的章节中,你的数据总是完美无瑕的。但在**办公室 (Office)**里,数据往往是一团糟的。作为架构师,你很大一部分工作是确保系统在遇到坏数据时不会崩溃。
什么是 CSV? (What is a CSV?)
CSV (逗号分隔值, Comma-Separated Values) 是导出电子表格(如 Excel)的标准格式。它本质上只是一个纯文本文件,每一行代表表格的一行,列与列之间用逗号 , 隔开。
例如: 101,Alice,Engineering,8500
- 索引 0:
101(工号) - 索引 1:
Alice(姓名) - 索引 2:
Engineering(部门) - 索引 3:
8500(薪资)

挑战:容错性 (Fault Tolerance)
财务部发来了 salaries.csv。你需要读取它,从第 4 列(索引为 3)中提取薪资,并将它们全部加总到 total_payroll 中。
陷阱: 这个文件被“污染”了。它包含空行、缺失的薪资,以及用英文单词拼写而不是数字表示的薪资(如果你试图用 int() 转换它们,将会引发 ValueError)。
你的任务
1
读取文件
打开 salaries.csv。务必记得使用 next(file) 跳过表头那一行!
2
解析行数据
循环遍历文件。去掉首尾空白,并使用 .split(',') 按逗号分割字符串。
3
最高防御
使用 try...except ValueError: 代码块。尝试将薪资转换为 int 并加入 total_payroll。如果转换失败(或者该行数据不完整/空行),你要优雅地 continue 到下一行,绝对不能让程序崩溃!
参考答案点击展开点击收起
点击展开点击收起
参考答案:
通过捕获异常,我们防止了一行错误数据毁掉整个数据流水线。这就是架构师的思维。
total_payroll = 0
with open('salaries.csv', 'r') as file:
next(file) # 跳过表头
for line in file:
clean_line = line.strip()
# 跳过完全空荡荡的行
if not clean_line:
continue
parts = clean_line.split(',')
# 防御启动!尝试解析,优雅失败。
try:
salary_str = parts[3]
salary = int(salary_str)
total_payroll += salary
except (ValueError, IndexError):
# 同时捕获坏数字和甚至没有第4列的残缺行
print(f"Skipping bad data row: {clean_line}")
print("Total Valid Payroll:", total_payroll)Loading...
终端输出
Terminal
Ready to run...