2016-03-01 25 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不保存它從輸入文件分析的數據。打印到屏幕後,它就會被扔掉。您可以將它收集到一個列表中並返回以供進一步處理。然後,您在第二個函數中調用writer,並且您無法通過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 
相關問題