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

编写脚本实现按列1前两位数字分组求和并格式化列1输出

解决方案:Python脚本处理数据分组求和与格式化

我来帮你写一个Python脚本,完美处理这个需求——不管你的数据文件有多长,它都能高效地逐行处理,完成分组求和和编码格式化。

脚本思路

  1. 逐行解析:读取每一行数据,拆分出开头的固定字段和后续的(编码、数值)对
  2. 编码格式化:对每个编码,提取整数部分的前两位,剩余位数补0,保留原有的小数和后缀(比如.03c)
  3. 分组求和:用字典记录每个格式化后编码对应的数值总和
  4. 输出结果:将处理后的编码和求和值按顺序拼接,输出符合要求的行

完整脚本代码

def process_line(line):
    # 去除首尾空白并拆分字段
    fields = line.strip().split()
    if len(fields) < 3:
        return line  # 跳过无效行
    
    # 提取开头的固定部分
    header = fields[:3]
    # 处理后续的编码-数值对
    sum_dict = {}
    
    # 遍历成对的字段(步长为2)
    for i in range(3, len(fields), 2):
        if i+1 >= len(fields):
            continue  # 跳过不完整的对
        code_str = fields[i]
        try:
            value = float(fields[i+1])
        except ValueError:
            continue  # 跳过无效数值
        
        # 拆分编码的整数部分和后缀(小数+字符)
        if '.' in code_str:
            int_part, suffix = code_str.split('.', 1)
            suffix = '.' + suffix
        else:
            int_part = code_str
            suffix = ''
        
        # 生成格式化后的整数部分:前两位+补零
        if len(int_part) >= 2:
            new_int = int_part[:2] + '0' * (len(int_part) - 2)
        else:
            new_int = int_part  # 处理整数部分不足两位的情况
        
        new_code = new_int + suffix
        
        # 累加数值
        if new_code in sum_dict:
            sum_dict[new_code] += value
        else:
            sum_dict[new_code] = value
    
    # 整理输出字段:按编码排序保持顺序(可选,也可以按出现顺序)
    output_fields = header.copy()
    # 按编码排序,确保输出顺序和输入的分组顺序一致
    for code in sorted(sum_dict.keys()):
        output_fields.append(code)
        # 处理数值:如果是整数就输出整数,否则保留小数
        val = sum_dict[code]
        output_fields.append(str(int(val)) if val.is_integer() else str(val))
    
    return ' '.join(output_fields)

def main():
    import sys
    # 读取标准输入,输出到标准输出,方便处理大文件
    for line in sys.stdin:
        processed_line = process_line(line)
        print(processed_line)

if __name__ == "__main__":
    main()

如何使用

  1. 将上面的代码保存为process_data.py
  2. 在命令行运行:
    python process_data.py your_input_file.txt > your_output_file.txt
    
    这样就能处理你的长数据文件,结果会写入your_output_file.txt

测试示例输入

用你给出的示例输入测试:
输入行:

ele table 5 1001.03c 1 1002.03c 2 1003.03c 1 2003.03c 3 2004.03c 1 3006.03c 0 3007.03c 5 44009.03c 1
ele table 22 1001.03c 1 1002.03c 0 1003.03c 0.2 2003.03c 1 2004.03c 2 3006.03c 2.2 3007.03c 3 44009.03c 0 55010.03c 2

输出结果和你期望的完全一致:

ele table 5 1000.03c 4 2000.03c 4 3000.03c 5 44000.03c 1
ele table 22 1000.03c 1.2 2000.03c 3 3000.03c 5.2 44000.03c 0 55000.03c 2

这个脚本处理效率很高,即使是非常大的文件也能轻松应对,因为它是逐行处理,不会把整个文件加载到内存里。

内容的提问来源于stack exchange,提问作者Mohd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:22