Python循环故障排查:多文件同位置数据求和存入列表
多文件同位置数据求和实现方案
需要实现读取多个文件,将每个文件同位置的数据求和,最终生成两个列表:
- 位置列表(已有部分实现逻辑)
- 同位置数据求和列表,例如示例中三个文件的求和结果为
[6.5, 19.5, 17.8, 18.4]
文件格式示例
每个文件每行包含位置和数据,数据用逗号作为小数点分隔,且所有文件行数一致:
文件1
1 3,5 2 4,9 3 7,9 4 8,7
文件2
1 2,5 2 4,7 3 7,0 4 8,0
文件3
1 0,5 2 9,9 3 2,9 4 1,7
现有代码问题分析
现有代码仅能读取单个文件的数据到temp_list,无法实现多文件同位置数据累加,同时存在以下细节问题:
- 拼写错误:
position_list被误写为positions_list - 字符串处理冗余:
strip("\n")可简化为strip(),split(" ")会生成空字符串(因每行是多空格分隔),应使用split()自动处理任意空白符 - 数据格式兼容问题:文件中数据用逗号作为小数点,直接转
float会报错,需先替换为.
完整解决方案代码
方案一:适配位置顺序可能不一致的场景
# 替换为实际的文件路径列表 file_paths = ["文件1.txt", "文件2.txt", "文件3.txt"] position_list = [] sum_data = [] # 存储同位置数据的求和结果 for file_path in file_paths: with open(file_path, 'r', encoding='utf-8') as f: temp_list = [] for row in f.readlines(): row = row.strip() if not row: # 跳过空行 continue # 分割位置与数据,自动处理多空格 parts = row.split() pos = float(parts[0]) # 替换逗号为小数点,转换为浮点数 data = float(parts[1].replace(',', '.')) temp_list.append(data) # 处理第一个文件时初始化列表 if not position_list: position_list.append(pos) sum_data.append(data) else: # 后续文件找到对应位置索引,累加数据 idx = position_list.index(pos) sum_data[idx] += data print("位置列表:", position_list) print("求和数据列表:", sum_data)
方案二:位置严格按顺序排列时的高效实现
如果所有文件的行顺序完全对应同一位置,可跳过索引查找,直接按行号累加:
file_paths = ["文件1.txt", "文件2.txt", "文件3.txt"] position_list = [] sum_data = [] for file_idx, file_path in enumerate(file_paths): with open(file_path, 'r', encoding='utf-8') as f: for line_idx, row in enumerate(f.readlines()): row = row.strip() if not row: continue parts = row.split() pos = float(parts[0]) data = float(parts[1].replace(',', '.')) if file_idx == 0: position_list.append(pos) sum_data.append(data) else: sum_data[line_idx] += data print("位置列表:", position_list) print("求和数据列表:", sum_data)
关键逻辑说明
- 使用
with open自动管理文件资源,避免手动关闭文件的遗漏 - 统一处理数据格式:将逗号替换为小数点,确保浮点数转换正常
- 分阶段初始化与累加:第一个文件初始化求和列表,后续文件直接累加对应位置的数据
内容的提问来源于stack exchange,提问作者Tessan88
相关产品推荐
相关产品推荐

