Python 如何使用公共字符串为多个文本文件运行脚本?

Python 如何使用公共字符串为多个文本文件运行脚本?,python,python-3.x,for-loop,file-io,glob,Python,Python 3.x,For Loop,File Io,Glob,在我的研究工作中,我有多个文本文件,它们有一个共同的字符串“Max”,Max的不同值范围为0.10到2.00,步骤为0.10,如下所示: A_100Hz_Rate20Hz_5tot_0.10Max_1_ A_100Hz_Rate20Hz_5tot_0.10Max_2_ A_100Hz_Rate20Hz_5tot_0.10Max_3_ . . . A_100Hz_Rate20Hz_5tot_2.00Max_1_ A_100Hz_Rate20Hz_5tot_2.00Max_2_

在我的研究工作中,我有多个文本文件,它们有一个共同的字符串“Max”,Max的不同值范围为0.10到2.00,步骤为0.10,如下所示:

 A_100Hz_Rate20Hz_5tot_0.10Max_1_ 
 A_100Hz_Rate20Hz_5tot_0.10Max_2_
 A_100Hz_Rate20Hz_5tot_0.10Max_3_
 .
 .
 .
 A_100Hz_Rate20Hz_5tot_2.00Max_1_ 
 A_100Hz_Rate20Hz_5tot_2.00Max_2_
 A_100Hz_Rate20Hz_5tot_2.00Max_3_
我需要根据最大值(例如:0.10Max)导入所有文件,以分别获得具有相同最大值的文件的平均值,从而获得:

 Ave_A_100Hz_Rate20Hz_5tot_0.10Max_3_
 .
 .
 .
 Ave_A_100Hz_Rate20Hz_5tot_2.00Max_3_
我试过一个手动glob模块,它在一个“Max”值下运行良好,但在整个范围内不起作用。这是我的代码:

import numpy as np
import glob
import pandas as pd

h = np.linspace(0.10,2.00,20)  
for x in h: 
     x1 = ("%.2f" % x)
     glob_path = 'input/*_{}Vbr_*.txt'.format(x1)
     import_files = glob.glob(glob_path)
     print(x,import_files )
     for index, file_name in enumerate(import_files ):
          merged_data = pd.read_csv(file_name, header=None, delimiter="\t").values
          if index==0:    
               summation = merged_data
          else:
               summation = summation + merged_data
          averaging = summation/len(import_files)         
          np.savetxt('output/Ave_'+file_name[10:], averaging, delimiter="\t" )
我需要写一个大概的剧本。但是,在我的例子中,现在我只使用了两个值x=1.50和x=2.0的脚本来简化它。我尝试打印(导入_文件),并希望输出为:

['input\\A_100Hz_Rate20Hz_5tot_1.50Max_1_.txt', 
'input\\A_100Hz_Rate20Hz_5tot_1.50Max_2_.txt', 
'input\\A_100Hz_Rate20Hz_5tot_1.50Max_3_.txt']


['input\\A_100Hz_Rate20Hz_5tot_2.00Max_1_.txt', 
'input\\A_100Hz_Rate20Hz_5tot_2.00Max_2_.txt', 
'input\\A_100Hz_Rate20Hz_5tot_2.00Max_3_.txt']
但实际产出(简而言之):

它在内核中导致了一个错误

      np.savetxt('output/Ave_'+file_name[10:], averaging, delimiter="\t" )

 NameError: name 'file_name' is not defined

请问,有什么建议吗?

我认为您只需测试
导入文件是否为空:

for x in h: 
     x1 = ("%.2f" % x)
     glob_path = 'input/*_{}Vbr_*.txt'.format(x1)
     import_files = glob.glob(glob_path)
     print(x,import_files )
     if len(import_files) != 0:
         for index, file_name in enumerate(import_files ):
              merged_data = pd.read_csv(file_name, header=None, delimiter="\t").values
              if index==0:    
                   summation = merged_data
              else:
                   summation = summation + merged_data
          averaging = summation/len(import_files)         
          np.savetxt('output/Ave_'+file_name[10:], averaging, delimiter="\t" )

就实际输出而言,对于与glob模式不匹配的情况,您将得到空列表([])。对于NameError:name'file_name'没有定义,我猜这是关于内部For循环的缩进问题。代码是如何通过“pd.read\u csv(file\u name…”行的,该行也使用相同的变量(file\u name)只是为了详细说明ranjith的评论,您应该将
打印(导入文件)
替换为
打印(x,导入文件)
以更清楚地显示哪些
x
值得到空列表。@ranjith如果没有我的手动glob,代码在全范围h=np中运行良好。h:x1=(“%.2f”%x)glob_路径=”input/*{}Vbr*.txt”。格式(x1)@sergeballsta-print(x,导入文件)给我:0.1[],0.2[]等等…@SergeBallesta-我编辑了我的问题,请看!如果(len(import_files!=0):^SyntaxError:无效语法,则给我错误
for x in h: 
     x1 = ("%.2f" % x)
     glob_path = 'input/*_{}Vbr_*.txt'.format(x1)
     import_files = glob.glob(glob_path)
     print(x,import_files )
     if len(import_files) != 0:
         for index, file_name in enumerate(import_files ):
              merged_data = pd.read_csv(file_name, header=None, delimiter="\t").values
              if index==0:    
                   summation = merged_data
              else:
                   summation = summation + merged_data
          averaging = summation/len(import_files)         
          np.savetxt('output/Ave_'+file_name[10:], averaging, delimiter="\t" )