2016-12-12 14 views
1

私は気象観測の巨大なリストを持っているスクリプトを書いています。リスト内の気象観測ごとに、コードはその時間の気象レーダーファイルを開きます。次に、いくつかのデータを取り出し、次のライン/観測に移動します。オープンファイルのI/Oメモリ管理をPythonで

メモリを安全にするために、私は次の行に移動するときに気象レーダーファイルを閉じたいと思います。

synop = open(filename).read().splitlines() 
    synop.close() 

最初の行は結構です、私はうまくSYNOPと、後でものを行うことができます:ここで私は何をすべきかの簡易版です。 synopを閉じようとすると問題が発生しますが、それはtype = listです。

私はアクセスしているファイルを閉じる別の方法がありますか?または、pythonはコードの最初の行の後に自動的にファイルを閉じますか?

私はこれを約実行します。私は良いメモリ管理が必要なので4.5mのファイル!

答えて

1

問題は、fileオブジェクトを保持していないことです。 Pythonは最初の行の後にファイルを閉じますが、それは明示的ではないので、それは正しくないかpythonicではありません。

一つの正しい方法は、このように、fileオブジェクトを維持することです:

f = open(filename) 
synop = f.read().splitlines() 
f.close() 

しかし、最善の方法は、Pythonは、すぐにこのスコープが終了したあなたのためのファイルを閉じますcontext management

with open(filename) as f: 
    synop = f.read().splitlines() 

使用することです。