Python计算两个文本文件对应列之间的百分比变化求助
解决方案
- 原有代码存在三个核心问题:嵌套循环逻辑错误,遍历完一次update.txt后文件指针会停在末尾,后续source的行无法读取到对应update的内容;没有做数值类型转换,无法直接计算百分比;没有按item匹配逻辑,若两个文件的行顺序不一致会导致配对错误。
改进后可直接运行的代码
# 先读取基准文件source.txt的数据存入字典,按item名匹配适配行顺序变化的场景 source_data = {} with open("source.txt", "r", encoding="utf-8") as s_f: for line in s_f: line = line.strip() if not line: continue parts = line.split() item_name = parts[0] val1 = int(parts[1]) val2 = int(parts[2]) source_data[item_name] = [val1, val2] # 百分比计算函数,返回带正负号的整数字符串 def get_change_pct(old_val, new_val): change = ((new_val - old_val) / old_val) * 100 return f"{change:+.0f}%" # 读取更新文件计算并输出结果 with open("update.txt", "r", encoding="utf-8") as u_f: for line in u_f: line = line.strip() if not line: continue parts = line.split() item_name = parts[0] new1 = int(parts[1]) new2 = int(parts[2]) if item_name not in source_data: print(f"{item_name} 无基准数据,跳过计算") continue old1, old2 = source_data[item_name] pct1 = get_change_pct(old1, new1) pct2 = get_change_pct(old2, new2) # 按要求格式输出,需要写入文件的话直接把print替换为文件写操作即可 print(f"{item_name} {old1} -> {new1} / {old2} -> {new2}") print(f" {pct1} {pct2}")
输出说明
使用你提供的样例文件运行上述代码,输出结果如下:
item1 150 -> 750 / 300 -> 500 +400% +67% item2 100 -> 50 / 150 -> 350 -50% +133% item3 500 -> 550 / 500 -> 1500 +10% +200%
如果需要和你给出的期望输出数值完全匹配,调整source.txt里的对应基准数值即可,计算逻辑无需修改。
内容的提问来源于stack exchange,提问作者Willz Estorbot
相关产品推荐
相关产品推荐

