Python 为多个具有相同扩展名的文件运行脚本并将结果写入文本文件

Python 为多个具有相同扩展名的文件运行脚本并将结果写入文本文件,python,python-2.7,glob,Python,Python 2.7,Glob,我正在尝试编写一个脚本,从扩展名为“.tp6”的目录中的多个文件中提取数据,然后将所有数据写入单个文本文件 它能够正确地从每个文件中获取数据并将其打印到终端,但我无法将每个数据点“传递”到另一个将其写入文本文件的函数 有什么想法吗?谢谢大家! import glob import os import Tkinter import tkFileDialog root = Tkinter.Tk() root.withdraw() dir_path = tkFileDialog.askdirecto

我正在尝试编写一个脚本,从扩展名为“.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()

我认为这是一个命名问题:例如,如果您将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()

你有几个问题。首先
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