🐸

CSV 处理器

Python 基础python-architect-31-the-csv-processor
奖励: 100 XP
|

CSV 处理器

欢迎来到你的真实世界毕业特训。

在之前的章节中,你的数据总是完美无瑕的。但在**办公室 (Office)**里,数据往往是一团糟的。作为架构师,你很大一部分工作是确保系统在遇到坏数据时不会崩溃。

什么是 CSV? (What is a CSV?)

CSV (逗号分隔值, Comma-Separated Values) 是导出电子表格(如 Excel)的标准格式。它本质上只是一个纯文本文件,每一行代表表格的一行,列与列之间用逗号 , 隔开。

例如: 101,Alice,Engineering,8500

  • 索引 0: 101 (工号)
  • 索引 1: Alice (姓名)
  • 索引 2: Engineering (部门)
  • 索引 3: 8500 (薪资)

CSV 原理图解

挑战:容错性 (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...