1

IDと一致する必要のあるいくつかの関連フィールドを格納する2つのcsvファイルがあります。現在、Python 2.4では、辞書キーをレコードIDとして、csvファイルをレコードオブジェクトの辞書にロードしています。次に、一方をループしてもう一方のキーを照合し、いくつかの処理を行います。

これはすべて問題なく機能しますが、これは約60,000レコードの比較的小さなcsvファイルにあります。間もなく、何百万ものレコードと、場合によっては複数のcsvファイルを処理する必要があります。現在の方法でのメモリ負荷が気になります。

私は当初、csvリーダーの単純なループについて考えていて、それらをメモリにロードすることはまったくありませんでしたが、他のファイルの100万レコードごとに数百万レコードをループする場合、ここでは非常に非効率的なものを話します。

それで、これを行うための良い方法に関するアイデアはありますか?私はPython2.4で立ち往生しており、csvファイルから実際に変更することはできません。可能であれば、SQLの使用を避けたいと思います。ありがとう

編集:球場の図として、私は最大20個の200MBファイルを見ています。

4

1 に答える 1

2

SQLを避けたい理由は何ですか?

あなたは本当にある種のデータベースの使用に切り替えたいと思っています。まずSQLiteをお勧めします。モジュールとしてPythonに組み込まれていsqlite3ます。。他の依存関係はなく、データストレージにプレーンファイル(またはRAM)を使用します-ネットワーク/サーバーのセットアップは必要ありません-そして、始めるのはとても簡単です。

データベースに切り替える理由は次のとおりです。

  • 書くコードがはるかに少なくなります。SELECT特定の要素を探すためにループを作成する代わりに、クエリを作成するだけで済みます。
  • データベースは、あなたが考えもしなかった方法でクエリを最適化する方法を知っています。通常、Pythonでロールするどの疑似データベースよりもはるかに高速です。
  • より複雑なクエリを実行できます。特定の条件を満たす行を選択したり(SELECT * FROM table WHERE...)、あるテーブルのレコードを別のテーブルのレコードと相関させたり()することができますSELECT * FROM table1 JOIN table2...
于 2012-05-14T11:05:16.203 に答える