You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:54:02