Как запустить скрипт для нескольких текстовых файлов с общей строкой? - PullRequest
2 голосов
/ 25 марта 2019

В моей исследовательской работе у меня несколько текстовых файлов имеют общую строку «Макс», и Макс имеет разные значения в диапазоне от 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_

Мне нужно импортировать все файлы в зависимости от значения Max (например, 0.10Max), чтобы получить среднее значение файлов с одинаковыми значениями Max отдельно, чтобы получить:

 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, чтобы упростить его. Я попытался распечатать (import_files) и ожидал, что результат будет:

['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']

Но фактический результат (вкратце):

0.1 []
0.2 []
1.5 ['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']
1.6 []
1.7 []
2.0['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

Пожалуйста, есть предложения?

1 Ответ

2 голосов
/ 26 марта 2019

Я думаю, что вам нужно просто проверить, пусто ли import_file:

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" )
...