私は約200,000個以上のオブジェクトのリストを持っています。それぞれがファイルを表しています(実際にはファイルの内容は保持せず、完全なパス名と日付だけです)。大きなリストを調べようとしたときのPython IndexError
私が書いているプログラムは、ユーザー提供の日付範囲によっては、これらのファイルのサブセットをコピーします。私は最初、(glob
モジュール付き)ソースディレクトリ内のすべてのファイルのリストを作成し、私のファイル・表現クラスのインスタンスを作成し、そのように、リストにそのインスタンスを追加します。
for f in glob.glob(srcdir + "/*.txt"):
LOG_FILES.append(LogFile(f))
を今、ファイルのコピーを素早く保ち、コードブロックをきれいにするために、日付範囲内に収まらないLogFileオブジェクトを削除します。
for i in xrange(0, len(LOG_FILES)):
if LOG_FILES[i].DATE < from_date or LOG_FILES[i].DATE > to_date:
del(LOG_FILES[i])
その後、私は、リストに残っているファイルをコピーすることができます
for logfile in LOG_FILES:
os.copy(logfile.PATH, destdir)
問題がfor i in xrange...
例で発生します。i
の値が63792に到達したとき、私ははIndexErrorを投げます。
IndexError: list index out of range.
EDITすばやくご回答いただきありがとうございます。今私はそれについて考えている、それは私の愚かな監督だった。もう一度、みなさん、ありがとう。 :)
ではなく、反復処理中のシーケンスを変更するLogFile(f).DATEです。 –
SQLで日付範囲を簡単に照会できます。アプリケーションがユーザーに配布されることを意図しているのであれば、おそらくデータベースが最適です。ちょうどアイデア。 – krs1
ありがとうございましたkrsですが、配布用ではありません - 特定のイベントのログを作成する古くからの古風なシステム(私は最終的に書き直す予定です)のログファイルのセットを取得するだけです。 – nesv