我试图通过迭代数千条数据库记录来生成一个大数据文件(以 GB 为单位)。文件的顶部是文件后面出现的每个“功能”的一行。他们看着像是:
@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 中获得文字处理器的“插入”功能?最终文件大于我所有可用内存。