如何在不使用pandas的情况下统计new.csv与old.csv的特定状态变更次数
不使用Pandas统计CSV中的状态变更
我们有两个CSV文件:new.csv和old.csv,文件内容如下:
旧文件(old.csv)内容
abc done xyz done pqr done rst pending
新文件(new.csv)内容
abc pending xyz not_done pqr pending rst done
需要统计两类状态变更:
- count1:从
done变为pending的条目数(预期结果:2,对应abc、pqr) - count2:从
done变为not_done的条目数(预期结果:1,对应xyz)
纯Python实现代码
# 初始化统计计数器 count1 = 0 count2 = 0 # 读取旧文件,构建状态映射字典 old_status = {} with open('old.csv', 'r') as f_old: for line in f_old: # 去除首尾空白,按空格分割(假设字段无空格) parts = line.strip().split() if len(parts) == 2: key, status = parts old_status[key] = status # 读取新文件,对比状态并统计 with open('new.csv', 'r') as f_new: for line in f_new: parts = line.strip().split() if len(parts) == 2: key, new_status = parts # 只处理旧状态是done的条目 if old_status.get(key) == 'done': if new_status == 'pending': count1 += 1 elif new_status == 'not_done': count2 += 1 # 输出结果 print(f"count1(done→pending): {count1}") print(f"count2(done→not_done): {count2}")
代码逻辑说明
- 构建旧状态字典:先读取
old.csv,将每个条目的标识(第一列)作为键,状态(第二列)作为值存入字典,方便后续快速查找。 - 遍历新文件统计:逐行读取
new.csv,对每个条目,先检查其在旧文件中的状态是否为done,再根据新状态判断属于哪类变更,对应计数器加1。 - 边界处理:代码中加入了
len(parts) == 2的判断,避免空行或格式错误的行影响统计。
执行代码后输出结果:
count1(done→pending): 2 count2(done→not_done): 1
内容的提问来源于stack exchange,提问作者SID EDUCATION
相关产品推荐
相关产品推荐

