何千ものデータベース レコードを反復処理して、大きなデータ ファイル (GB 単位) を生成しようとしています。ファイルの先頭には、ファイルの後半に表示される各「機能」の行があります。それらは次のようになります。
@attribute 'Diameter' numeric
@attribute 'Length' real
@attribute 'Qty' integer
これらの属性を使用するデータを含む行は次のようになります。
{0 0.86, 1 0.98, 2 7}
ただし、私のデータはまばらなデータであるため、データベースの各レコードには各属性が含まれていない可能性があり、完全な機能セットが何であるかは事前にわかりません。理論的には、データベース レコードを 2 回繰り返して、1 回目は機能セットを蓄積し、2 回目はレコードを出力することができますが、より効率的な方法を見つけようとしています。
次の疑似コードのような方法を試してみたいと思います。
fout = open('output.dat', 'w')
known_features = set()
for records in records:
if record has unknown features:
jump to top of file
delete existing "@attribute" lines and write new lines
jump to bottom of file
fout.write(record)
それは、ジャンプ/書き込み/ジャンプバックの部分です。どのようにやってのけるかわかりません。Python でこれを行うにはどうすればよいでしょうか。
私は次のようなものを試しました:
fout.seek(0)
for new_attribute in new_attributes:
fout.write(attribute)
fout.seek(0, 2)
ただし、これは、指定したシーク位置から始まる新しい行を単に挿入するのではなく、ファイルの先頭にある属性行とデータ行の両方を上書きします。
ドキュメント全体をメモリにロードせずに、Python でワープロの「挿入」機能を取得するにはどうすればよいですか? 最終的なファイルは、使用可能なすべてのメモリよりも大きくなります。