我試圖通過遍歷數千個數據庫記錄來生成大型數據文件(在GB中)。在文件的頂部是每個「特徵」的一行,在文件中出現後者。它們看起來像:使用這些屬性包含數據使用Python高效地重寫大文本文件中的行
@attribute 'Diameter' numeric
@attribute 'Length' real
@attribute 'Qty' integer
行類似:
{0 0.86, 1 0.98, 2 7}
然而,由於我的數據是稀疏的數據,每一個從我的數據庫可能沒有每個屬性的記錄,我不不知道提前完成的功能集是什麼。理論上,我可以兩次迭代我的數據庫記錄,第一次累積功能集,然後第二次輸出我的記錄,但我試圖找到更有效的方法。
我想嘗試像下面的僞代碼的方法:
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 中獲得文字處理器的「插入」功能而不需要將整個文檔加載到內存中?最終文件比我所有可用內存大。
您不能在沒有複製的情況下將字符串插入文本文件,因此我認爲最好的方法是將功能和數據行保存在兩個列表中。在for循環中,將這些附加()添加到這些列表中,然後將兩個最終列表寫入文件。 – HYRY