私はxmlファイルから大量のデータを取得していますが、すべてのデータを互いに照合する必要があります(50万レコードを超えている)。それは位置データなので、郡、路線接頭辞、路線接尾辞、通り名、出発家屋番号、終了番号などの情報があります。重複やハウスナンバーオーバーラップなどがあり、問題のある場所など、すべてのデータを報告する必要があります。また、xmlファイル内にデータの順序はありません。したがって、各レコードは他のすべてのレコードと照合する必要があります。Pythonでデータをサニタイズするための大きなテンポラリデータベース
今、私は通りの名前情報に基づいて場所の辞書を作成し、その家の番号の開始と終了の場所のリストを保存しています。この作業がすべて完了したら、各リスト内で重複や重複を見つけるために作成された膨大なデータ構造を繰り返しています。私はデータ構造のサイズやエラーの数に問題があります。
私に示唆された解決策の1つは、ファイルから読み込まれたすべてのデータを保持するために一時的なSQLite DBを作成し、DBを実行してデータに関するすべての問題を見つけ出し、報告してから破棄することでしたDB。これを行うためのより良い/より効率的な方法がありますか?そして、この問題に近づくためのよりよい方法に関する提案はありますか?
fyiとして、私が読み込んでいるxmlファイルは500MBを超えています(これは大部分ですが、この通りの情報以外のデータも保存しています)が、ファイルの処理は私の所ではありません問題が発生すると、ファイルから取得したデータを処理するときのみです。
EDIT:私は詳細に行くことができましたが、データのためにメモリに十分な空きがあると述べたポスターは実際には正しかったですが、1つのケースではこれを350万レコードに対して実行しなければなりませんでした。インスタンス私は一時的なデータベースを作成する必要がありました。
Python標準ライブラリbsddbパッケージの使用を検討してください。ディクショナリインターフェイスを提供しますが、ディスク上のハッシュテーブルまたはbツリーのいずれかによってサポートされています。 –
これは2.6以降で廃止予定ですhttp://docs.python.org/library/bsddb.html –
OK、http://www.jcea.es/programacion/pybsddb.htmとbsddb3モジュールを使用してください...同じ考え方、わずかに異なる名前。 –