私は以下の問題に直面しています。私は大きなデータセット(数10GB)を作成します。ネストされた辞書として保存されたオブジェクトに関する情報を含む各オブジェクトのエントリを含むYAML形式の出力ファイルを作成したいと思います。しかし、私は決してメモリ内のすべてのデータを同時に保持しません。YAMLファイルを段階的に作成する
出力データは、オブジェクト名を保存された値にマッピングする辞書に格納する必要があります。シンプルなバージョンは次のようになります。
object_1:
value_1: 42
value_2: 23
object_2:
value_1: 17
value_2: 13
[...]
object_a_lot:
value_1: 47
value_2: 11
は、低メモリフットプリントを維持するために、私は、各オブジェクトのエントリを書いて、すぐに書き込んだ後、それを削除したいと思います。
from yaml import dump
[...] # initialize huge_object_list. Here it is still small
with open("output.yaml", "w") as yaml_file:
for my_object in huge_object_list:
my_object.compute() # this blows up the size of the object
# create a single entry for the top level dict
object_entry = dump(
{my_object.name: my_object.get_yaml_data()},
default_flow_style=False,
)
yaml_file.write(object_entry)
my_object.delete_big_stuff() # delete the memory consuming stuff in the object, keep other information which is needed later
を基本的に私はいくつかの辞書を書いていますが、それぞれが1つのキーだけを持っており、オブジェクト名は一意であるため、これが爆破されていません。次のように私の現在のアプローチがあります。これはうまくいきますが、ちょっとのビットのように感じます。誰かがこれをより良く/適切に行う方法を知っているかどうか尋ねたいと思います。
大きな辞書をYAMLファイルに書き込む方法はありますか?
あなたのご意見ありがとうございました。これは非常に役に立ちました。私はメモリオーバーヘッドの問題を認識していませんでした。これが私のデータにとって問題になるかどうかを確認します。 – m00am