Python批量处理多CSV文件仅输出单条结果 如何迭代输出所有结果
问题原因
你的计算、结果输出逻辑没有放在for file in files的循环缩进块内,程序只会在遍历完所有csv文件后,对最后一个遍历到的文件执行计算和输出,所以只能得到单个文件的结果。
修正方案
将所有单文件相关的处理逻辑(包括变量计算、结果输出)都缩进后放入for循环内部即可,修正后的代码如下:
import sys import os import logging import subprocess import argparse import pandas as pd import glob files = glob.glob('/scratch/*/*.csv') for file in files: df = pd.read_csv(file,delimiter = ',',skiprows=range(1,11)) # 单文件计算逻辑放到循环内部,生成dif_r1a等变量 # do some calculation on each file # calculate the final value metric = (max(max(dif_r1a),max(dif_r1c),max(dif_r1g),max(dif_r1t),max(dif_r2a),max(dif_r2c),max(dif_r2g),max(dif_r2t))) # 打印逻辑也放到循环内部 print(os.path.basename(file) + ' ' + str(metric))
额外注意事项
- 所有
dif_开头的变量必须在循环内部初始化、计算,避免前一个文件的计算结果残留污染后续文件的输出 - 如果需要汇总所有文件的结果,可以在循环外初始化一个空列表,每次循环将当前文件的文件名和metric值存入列表,循环结束后统一做导出等后续处理
内容的提问来源于stack exchange,提问作者nbn
相关产品推荐
相关产品推荐

