2016-12-09 205 views
0

我有下面的代码,它的工作原理就像我想要的。我想改变它的唯一的事情就是添加一个for循环。请注意以下行:For循环通过文件循环

node = import_file("../Angle1/1eV/cascade.dump",multiple_frames = True) 

注意1eV在那里。我想从1到10eV循环。我怎样才能插入一个for循环从这样的1到100 eV,这样我就不必手动将它取出来,这需要一段时间?

# Import OVITO modules. 
from ovito.io import * 
from ovito.modifiers import * 

# Import NumPy module. 
import numpy 
import sys 



node = import_file("../Angle1/1eV/cascade.dump",multiple_frames = True) 
ovito.dataset.anim.current_frame = 1 

mod = WignerSeitzAnalysisModifier(per_type_occupancies = True) 
mod.reference.load("position_perfect_300.dump") 
node.modifiers.append(mod) 
node.compute() 
node.modifiers.append(SelectExpressionModifier(expression = 'ParticleType==1 && Occupancy.1==0 && Occupancy.2==0')) 
node.compute() 

f=open("1.out",'w') 
sys.stdout = f 


print("Number of O vacant sites: %i" % numpy.count_nonzero(node.output.particle_properties['Selection'])) 

f.close() 

回答

2

简单:只要让你的循环开始喜欢这个,然后保持相同的缩进incuding最终print声明(即我改变,因此不会覆盖sys.stdout,我的循环,使之前打开文件消息不会被覆盖):

with open("1.out",'w') as f: 

    for i in range(1,11): 
     node = import_file("../Angle1/{}eV/cascade.dump".format(i),multiple_frames = True) 
     ovito.dataset.anim.current_frame = 1 

     mod = WignerSeitzAnalysisModifier(per_type_occupancies = True) 
     mod.reference.load("position_perfect_300.dump") 
     node.modifiers.append(mod) 
     node.compute() 
     node.modifiers.append(SelectExpressionModifier(expression = 'ParticleType==1 && Occupancy.1==0 && Occupancy.2==0')) 
     node.compute() 

     f.write("Number of O vacant sites: %i\n" % numpy.count_nonzero(node.output.particle_properties['Selection'])) 
+0

如何结束for语句使其循环回来?如果它已经这样做,那么我认为我的打印语句每次都会被覆盖 –

+0

我需要循环一次执行下面的命令并写入我的文件。最后我的档案中应该有几件事。在继续阅读下一个文件之前是否知道执行下面的命令?我觉得它是目前设置的方式,它只是加载我所有的文件并计算最后一个,但我不确定。 –

+0

检查我的编辑。缩进对python至关重要,我希望你知道。 –