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

时间:2017-08-21 10:30:56

标签: python python-3.x file repeat calculation

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

from itertools import islice

with open('ex_original_1.idl') as f1, open('ex_new_1.idl') as f2:
    with open('ex_dif_1.txt', 'w') as f3:
        f1 = islice(f1, 905, None)  # skip first 905 lines
        f2 = islice(f2, 905, None)  # skip first 905 lines

        for f1_line, f2_line in zip(f1, f2):
            f1_vals = map(float, f1_line.strip().split())
            f2_vals = map(float, f2_line.strip().split())
            for v1, v2 in zip(f1_vals, f2_vals):
                try:
                    result = v1/v2
                    f3.write(str(result)+"\n")
                except ZeroDivisionError:           #should there be a value of zero
                    print("Encountered a value equal to zero in the second file. Skipping...")
                    continue

虽然它在两个文件(ex_original_1.idl和ex_new_1.idl)上运行良好,但我确实有更多相同类型的文件(~500)。我想更多次执行此程序,输出文件应在逻辑事项中命名:ex_dif_1.txt。为了使事情更加结构化,2种不同的类型(ex_original_i和ex_new_i)位于不同的目录中,我想将新文件写在一个单独的目录中(如果我理解正确,在文件名之前我包含了所有的路径文件,是吗?)。要回顾一下我所拥有的文件:

  • ex_original_1,ex_original_2,ex_original_3 ... ex_original_500
  • ex_new_1,ex_new_2,ex_new_3 ... ex_original_500

我想得到:

  • ex_dif_1,ex_dif_2,ex_dif_3 ... ex_dif_500

使用这行代码,只运行一次。 是否适合制作另一个单独的程序来多次运行这个程序,或者更确切地说是在现有程序中包含一个命令,可以举一个例子吗?

希望它足够清楚。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

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

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

>>> 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_orignal和ex_new输入文件。

>>> 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 :(得分:0)

使用循环启动程序。猜猜这对你有用......

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....}