2016-12-09 4 views
0

私は以下のコードを持っています。私がそれに変更したいのは、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

シンプル:ちょうど私はそれがsys.stdoutをオーバーライドしていない、と私はそう前にループをファイルを開き、変更されたこと(そして、あなたの最終print文をincuding同じインデントを維持し、あなたのループは次のように起動しますメッセージは上書きされません)。

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文をループバックするのですか?もし既にそれをしているのであれば、私はprint文が毎回上書きされると思う。 –

+0

一度ループする必要がある。以下のコマンドを実行してファイルに書き込む。最後に私のファイルにいくつかのものがあるはずです。次のファイルに移動する前に、以下のコマンドを実行することを知っていますか?私はそれが現在設定されているように感じる、それはちょうど私のすべてのファイルをロードし、最後のものを計算するが、私はわからない。 –

+0

私の編集をチェックしてください。インデントはPythonでは非常に重要なことです。 –

関連する問題