2016-03-01 4 views
-1

Я пытаюсь написать сценарий для извлечения данных из нескольких файлов в каталоге с расширением «.tp6», а затем написать все эти данные в один текстовый файл.Запуск скрипта для многих файлов одного и того же расширения и запись результатов в текстовый файл

Он может получить данные из каждого файла правильно и распечатать их на терминале, но я не смог «передать» каждую точку данных другой функции, которая записывает ее в текстовый файл.

Любые идеи? Спасибо!

import glob 
import os 
import Tkinter 
import tkFileDialog 

root = Tkinter.Tk() 
root.withdraw() 
dir_path = tkFileDialog.askdirectory() 
os.chdir(dir_path) 


def main(): 
    for file_path in glob.glob('*.tp6'): 
     uncovext(file_path) 

def main2(): 
    for file_path in glob.glob('*.tp6'): 
     totext(uncovext) 


#find and print data from each .tp6 file - this part works correctly 
def uncovext(file_path): 
    for line in open(file_path): 
     if line.startswith(' UNCONVOLVED INTEGRATED RADIANCE'): 
      text = line[36:47] 
      number = float(text) * 10000 
      print('%.3f' % number) 

def totext(uncovext): 
    with open("output.txt", "a") as f: 
     f.write(uncovext) 
     f.close() 

if __name__ == '__main__': 
    main() 
    main2() 

ответ

0

Я думаю, что это был вопрос именования: если вы измените входной параметр totext функции p_uncovext, например, он должен работать. Вам также нужно вызвать функцию для текста в вашем цикле.

import glob 
import os 
import Tkinter 
import tkFileDialog 

root = Tkinter.Tk() 
root.withdraw() 
dir_path = tkFileDialog.askdirectory() 
os.chdir(dir_path) 

def main(): 
    for file_path in glob.glob('*.tp6'): 
     uncovext(file_path) 

#find and print data from each .tp6 file - this part works correctly 
def uncovext(file_path): 
    for line in open(file_path): 
     if line.startswith(' UNCONVOLVED INTEGRATED RADIANCE'): 
      text = line[36:47] 
      number = float(text) * 10000 
      totext('%.3f' % number) 

def totext(p_uncovext): 
    with open("output.txt", "a") as f: 
     f.write(p_uncovext) 
     f.close() 

if __name__ == '__main__': 
    main() 
0

У вас есть пара проблем. Первый uncovext не сохраняет данные, которые он анализирует из входного файла. После печати на экране он просто выброшен. Вы можете собрать его в список и вернуть его для дальнейшей обработки. Затем вы вызываете автора во второй функции, и у вас нет никакого способа для main, чтобы сообщить main2, что данные.

Простое исправление - это единственная функция, которая вызывает uncovext и использует ее результат для вызова totext.

import glob 
import os 
import Tkinter 
import tkFileDialog 

root = Tkinter.Tk() 
root.withdraw() 
dir_path = tkFileDialog.askdirectory() 
os.chdir(dir_path) 


def main(): 
    for file_path in glob.glob('*.tp6'): 
     totext(uncovext(file_path)) 

#find and print data from each .tp6 file - this part works correctly 
def uncovext(file_path): 
    output = [] 
    for line in open(file_path): 
     if line.startswith(' UNCONVOLVED INTEGRATED RADIANCE'): 
      text = line[36:47] 
      number = float(text) * 10000 
      output.append('%.3f\n' % number) 
    return output 

def totext(uncovext): 
    with open("output.txt", "a") as f: 
     f.writelines(uncovext) 

if __name__ == '__main__': 
    main() 

Вы также можете переписать ваш парсер в качестве генератора и написать код, который я нахожу больше самопонятны (это только мне, хотя ...)

def main(): 
    with open('output.txt', 'a') as f: 
     for file_path in glob.glob('*.tp6'): 
      f.writelines(uncovext(file_path)) 

#find and print data from each .tp6 file - this part works correctly 
def uncovext(file_path): 
    for line in open(file_path): 
     if line.startswith(' UNCONVOLVED INTEGRATED RADIANCE'): 
      text = line[36:47] 
      number = float(text) * 10000 
      yield '%.3f\n' % number