我有一个用于分析大量数据的代码(形成两个不同的文件,它采用由空格分隔的值,然后计算这些值之间的相对差异并将它们写入另一个文件中)。
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)位于不同的目录中,我想将新文件写在一个单独的目录中(如果我理解正确,在文件名之前我包含了所有的路径文件,是吗?)。要回顾一下我所拥有的文件:
我想得到:
使用这行代码,只运行一次。 是否适合制作另一个单独的程序来多次运行这个程序,或者更确切地说是在现有程序中包含一个命令,可以举一个例子吗?
希望它足够清楚。在此先感谢您的帮助。
答案 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....}