如何在处理CSV文件时跳过城市和日期与上一行重复的行?
解决方案:CSV数据按州分组并跳过连续重复行
针对你的需求,我整理了完整的实现代码,既实现了按州名作为键构建字典、将城市和日期存入对应列表的功能,又能自动跳过和上一行完全重复的记录:
import csv def read_file(fp): # 初始化存储结果的字典:键为州名,值为(城市, 日期)的列表 state_data = {} # 用来保存上一行的城市和日期,初始设为None prev_city_date = None reader = csv.reader(fp) # 跳过表头行 next(reader) for row in reader: # 解析当前行的州、城市、日期 state, city, date = row current_city_date = (city, date) # 判断当前行是否和上一行完全重复,重复则跳过 if current_city_date == prev_city_date: continue # 如果州不在字典里,先初始化对应的空列表 if state not in state_data: state_data[state] = [] # 将当前的城市和日期添加到对应州的列表中 state_data[state].append(current_city_date) # 更新上一行的记录为当前行 prev_city_date = current_city_date return state_data # 测试示例(假设你的CSV文件名为data.csv) if __name__ == "__main__": with open("data.csv", "r") as fp: result = read_file(fp) print(result)
代码逻辑拆解:
- 字典初始化:
state_data用来存储最终结果,键是州名,值是包含(城市, 日期)元组的列表 - 重复行过滤:用
prev_city_date保存上一行的城市和日期组合,每次遍历新行时对比,完全一致就直接跳过当前行 - 数据分组存储:遍历每行时,先检查州是否已在字典中,没有则创建空列表,再把当前的城市和日期组合添加进去
- 表头处理:用
next(reader)跳过第一行的表头数据
用你提供的测试CSV数据运行后,输出结果会是:
{'Michigan': [('Detroit', '3/31/00'), ('Detroit', '4/1/00'), ('Detroit', '4/2/00')]}
完美去掉了连续重复的两行Detroit 3/31/00。
内容的提问来源于stack exchange,提问作者Chuepapiii
相关产品推荐
相关产品推荐

