Python计算多文件夹文件数值平均值问题:var=5.0/10.0无结果
问题描述
我用Python计算每个var对应文件中数值的平均值,当var_values=1.0时程序运行正常,但var_values=5.0、10.0时无法得到结果。对应文件夹下的文件都包含非零数值,希望能获取这两个var对应的数值平均值。
当前代码
import os import csv NFILES = 501 Folder_name = '4_1012_nodes_var_1_K_1e3_Cb_1e-3_D_1e-10' K = 1e3 Cb = 1e-3 DiffCoeff = 1e-10 mean_radii = 50.0 var_values = [1.0, 5.0, 10.0] Distribution = 'ND' for var in var_values: numeric_values = [] # Reset the list for each var iteration file_count = 0 # Counter for the number of files processed for i in range(1, NFILES): folder_path = rf"D:\Users\debanikb\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D\{Folder_name}\{i}\Time_{mean_radii}_{var}{Distribution}_{K}_{Cb}_{DiffCoeff}.csv" if os.path.isfile(folder_path): with open(folder_path, 'r') as file: reader = csv.reader(file) row_values = [] for row in reader: for value in row: try: numeric_value = float(value) row_values.append(numeric_value) except ValueError: pass if row_values: numeric_values.extend(row_values) file_count += 1 if file_count > 0: average = sum(numeric_values) / len(numeric_values) print(f"Average of numeric values for var={var}:", average) print(f"Number of files averaged for var={var}:", file_count) else: print(f"No numeric values found for var={var}.")
文件数据格式

当前输出
Average of numeric values for var=1.0: 1.4373770078023274 Number of files averaged for var=1.0: 34 No numeric values found for var=5.0. No numeric values found for var=10.0.
问题原因与解决方法
核心问题:路径匹配错误
程序找不到var=5.0、10.0对应文件的原因,大概率是路径拼接不符合实际文件的命名规则:
- 当前
Folder_name固定为4_1012_nodes_var_1_...,只对应var=1的文件目录,其他var的文件应该在类似var_5、var_10的文件夹下。 - 生成文件名时,
var以5.0、10.0的格式拼接,但实际文件名可能使用整数形式(如5、10)。
针对性解决方案
方案1:动态生成对应var的文件夹路径
把Folder_name的定义移到var循环内,根据当前var值动态生成对应文件夹:
for var in var_values: # 动态生成对应var的文件夹名,这里假设文件夹里是整数格式的var值 Folder_name = f'4_1012_nodes_var_{int(var)}_K_1e3_Cb_1e-3_D_1e-10' numeric_values = [] file_count = 0 # 后续循环代码保持不变 for i in range(1, NFILES): folder_path = rf"D:\Users\debanikb\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D\{Folder_name}\{i}\Time_{mean_radii}_{int(var)}{Distribution}_{K}_{Cb}_{DiffCoeff}.csv" # ... 其余代码不变
方案2:修正文件名中的var格式
如果文件夹路径正确,但文件名里的var是整数格式(如5而非5.0),直接在路径拼接时把var转为整数:
# 替换原路径生成行 folder_path = rf"D:\Users\debanikb\OneDrive - Technion\Research_Technion\Python_PNM\Surfactant A-D\{Folder_name}\{i}\Time_{mean_radii}_{int(var)}{Distribution}_{K}_{Cb}_{DiffCoeff}.csv"
调试小技巧
在路径判断前添加打印语句,确认生成的路径是否和实际文件路径一致:
print(f"正在检查路径:{folder_path}") if os.path.isfile(folder_path): # ... 读取文件代码
内容的提问来源于stack exchange,提问作者KeplerNick123
相关产品推荐
相关产品推荐

