Python 多次重复一个程序(进行计算并将结果写入另一个文件)

Python 多次重复一个程序(进行计算并将结果写入另一个文件),python,python-3.x,file,repeat,calculation,Python,Python 3.x,File,Repeat,Calculation,我有一个用于分析大量数据的代码(从两个不同的文件中提取由空格分隔的值,然后计算这些值之间的相对差异,并将它们写入另一个文件) 虽然它在两个文件(ex_original_1.idl和ex_new_1.idl)上运行良好,但我确实有更多相同类型的文件(~500)。我想执行这个程序更多次,输出文件应该以逻辑形式命名:ex_dif_1.txt。为了使问题更加结构化,两种不同类型(ex_original_i和ex_new_i)位于不同的目录中,我希望将新文件写入一个单独的目录中(如果我理解正确,在文件名之

我有一个用于分析大量数据的代码(从两个不同的文件中提取由空格分隔的值,然后计算这些值之间的相对差异,并将它们写入另一个文件)

虽然它在两个文件(ex_original_1.idl和ex_new_1.idl)上运行良好,但我确实有更多相同类型的文件(~500)。我想执行这个程序更多次,输出文件应该以逻辑形式命名:ex_dif_1.txt。为了使问题更加结构化,两种不同类型(ex_original_i和ex_new_i)位于不同的目录中,我希望将新文件写入一个单独的目录中(如果我理解正确,在文件名之前,我包括所有文件的路径,是吗?)。要重述我拥有的文件,请执行以下操作:

  • ex_original_1,ex_original_2,ex_original_3。。。ex_原版500
  • ex_new_1,ex_new_2,ex_new_3。。。ex_原版500
我想得到:

  • ex_dif_1,ex_dif_2,ex_dif_3。。。ex_dif_500
使用这行代码,它只工作一次。 如果让另一个单独的程序多次运行这个程序是合适的,或者更确切地说,在这个现有程序中包含一个命令,那么举个例子会更好吗


希望这足够清楚。提前感谢您的帮助。

如果文件位于不同的文件夹中,这将有所不同。让我知道确切的情况

如果存在于同一文件夹中,您可以尝试此操作

不要硬编码文件名,而是动态获取它们!如果该输出文件不存在,则获取默认名称,否则为1加上旧文件

>>> import os
>>> files = [f for f in os.listdir('.') if f.lower().startswith('ex_dif_')]
>>> files
['ex_dif_1.txt']
>>> outfile="outfilefolder/ex_diff_%d.txt"
>>> number = 1
>>> if files:number=int(max(files,key=os.path.getctime).split('_')[2].split('.')[0])+1
>>> outfile=outfile%(number) if files else outfile%1`
>>> print outfile
'ex_diff_2.txt'
对于ex_原始文件和ex_新输入文件也是如此

>>> ofile="ofilefolder/ex_original_%d.idl"
>>> ofile1=ofile%(number) if files else ofile%1`
>>> nfile="nfilefolder/ex_new_%d.idl"
>>> nfile=nfile%(number) if files else nfile%1`
更改打开文件的部分以获取动态生成的名称

with open(ofile) as f1, open(filen) as f2:
    with open(outfile, 'w') as f3:

如果文件存在于不同的文件夹中,这将有所不同。让我知道确切的情况

如果存在于同一文件夹中,您可以尝试此操作

不要硬编码文件名,而是动态获取它们!如果该输出文件不存在,则获取默认名称,否则为1加上旧文件

>>> import os
>>> files = [f for f in os.listdir('.') if f.lower().startswith('ex_dif_')]
>>> files
['ex_dif_1.txt']
>>> outfile="outfilefolder/ex_diff_%d.txt"
>>> number = 1
>>> if files:number=int(max(files,key=os.path.getctime).split('_')[2].split('.')[0])+1
>>> outfile=outfile%(number) if files else outfile%1`
>>> print outfile
'ex_diff_2.txt'
对于ex_原始文件和ex_新输入文件也是如此

>>> ofile="ofilefolder/ex_original_%d.idl"
>>> ofile1=ofile%(number) if files else ofile%1`
>>> nfile="nfilefolder/ex_new_%d.idl"
>>> nfile=nfile%(number) if files else nfile%1`
更改打开文件的部分以获取动态生成的名称

with open(ofile) as f1, open(filen) as f2:
    with open(outfile, 'w') as f3:

用循环启动程序。我猜这应该对你有用

list_of_files = os.listdir("path to files")
in1files = [file for file in list_of_files if file.startswith('ex_original_')]
in2files = [file for file in list_of_files if file.startswith('ex_new_')]
outfiles=[]
for i in range(0,len(in1files)):
    outfile = "ex_dif_"+str(i+1)
    file1 = in1files[i]
    file2 = in2files[i]
    with open(file1,'r') as f1, open(file2,'r') as f2:
        with open(outfile, 'w') as f3:
            {your stuff continues here on....}

用循环启动程序。我猜这应该对你有用

list_of_files = os.listdir("path to files")
in1files = [file for file in list_of_files if file.startswith('ex_original_')]
in2files = [file for file in list_of_files if file.startswith('ex_new_')]
outfiles=[]
for i in range(0,len(in1files)):
    outfile = "ex_dif_"+str(i+1)
    file1 = in1files[i]
    file2 = in2files[i]
    with open(file1,'r') as f1, open(file2,'r') as f2:
        with open(outfile, 'w') as f3:
            {your stuff continues here on....}

完成后关闭文件。如果文件位于不同的目录中,则只需使用os.listdir(“path”)方法将值分配给列表。我在发布之前没有运行过这个,所以如果你遇到任何错误,请告诉我…当你打开一个文件时,你不需要显式地关闭它们!我不知道那件事。。谢谢你提供的信息;)完成后关闭文件。如果文件位于不同的目录中,则只需使用os.listdir(“path”)方法将值分配给列表。我在发布之前没有运行过这个,所以如果你遇到任何错误,请告诉我…当你打开一个文件时,你不需要显式地关闭它们!我不知道那件事。。谢谢你提供的信息;)是的,文件位于不同的文件夹中。ex_original_i和ex_new_i位于不同的文件夹中。我想将差异计算到另一个文件夹中。对不起,我没有在那里看到它。我已经按照你的建议写了(我希望是正确的)。它给出了一个错误:max()arg是一个空序列。我是否应该问另一个问题并发布完整的书面代码?没有必要!我已经添加了编辑。如果输出文件夹中没有文件,则会发生此错误。也就是说,当
文件
为空列表时!是的,文件位于不同的文件夹中。ex_original_i和ex_new_i位于不同的文件夹中。我想将差异计算到另一个文件夹中。对不起,我没有在那里看到它。我已经按照你的建议写了(我希望是正确的)。它给出了一个错误:max()arg是一个空序列。我是否应该问另一个问题并发布完整的书面代码?没有必要!我已经添加了编辑。如果输出文件夹中没有文件,则会发生此错误。也就是说,当
文件
为空列表时!