如何用Python读取文本文件列值并完成指定计算?
解决文本文件列计算问题的Python脚本修正
看起来你的脚本已经有了读取文件和拆分列的基础,但缺少提取文件名中的除数以及计算并拼接结果的关键步骤。我帮你修正了脚本,完全符合你的需求:
修正后的完整脚本
# 指定目标文件路径(单个文件无需用glob,直接路径更高效) file_path = '/home/drem/data/input.file' # 使用with语句自动管理文件,避免手动关闭的遗漏 with open(file_path, 'r') as input_file: # 逐行读取文件内容 for line in input_file: # 去除行尾换行符并拆分成列 columns = line.strip().split() # 跳过可能存在的空行 if not columns: continue # 提取第一列文件名中的第二个数字(比如39、29) filename = columns[0] # 按下划线分割文件名,取第二个元素并转为整数 divisor = int(filename.split('_')[1]) # 获取第4列和第6列的值(注意Python索引从0开始) col4 = int(columns[3]) col6 = int(columns[5]) # 构造你需要的计算表达式 calculation = f"({col4}*{col6})/{divisor}" # 如果需要直接输出计算结果而非表达式,可以替换成下面这行: # calculation = str((col4 * col6) / divisor) # 拼接原内容和计算结果并打印 print(f"{' '.join(columns)} {calculation}")
关键改进说明
- 简化文件读取:你原脚本用
glob处理单个文件是多余的,直接指定文件路径更高效;同时用with open语句自动管理文件关闭,比手动open/close更安全。 - 提取除数逻辑:通过
split('_')拆分文件名,精准获取下划线分隔的第二个数字(比如2.0_39_RAS.out拆分后得到['2.0', '39', 'RAS.out'],取索引1的元素就是39)。 - 完成计算与输出:将第4列、第6列转为整数后构造表达式,再和原行内容拼接输出,完全匹配你想要的格式。
运行效果
执行脚本后,输出会和你要求的完全一致:
2.0_39_RAS.out 1.911157 1.5 80 0 10 (80*10)/39 2.8_29_BAS.out 2.224520 1.5 78 0 60 (78*60)/29 2.0_29_CGD.out 2.198376 1.5 85 0 28 (85*28)/29 2.0_28_MPK.out 1.945320 1.5 78 0 36 (78*36)/28 2.1_30_CLR.out 2.281479 1.5 78 0 16 (78*16)/30
内容的提问来源于stack exchange,提问作者user14447697
相关产品推荐
相关产品推荐

