我有一些巨大的未分类的ID文件,如:
file1.txt
a1
a2
a3...etc
file2.txt
b1
a2
c1...etc
我试图最终把它们放在一个单独的排序文件中。它们每个都是几千兆字节,因此我无法将它们全部加载到内存中。
我目前的解决方案是迭代每个文件并根据每个ID的第一个字符将行保存到新文件。 这将创建一个可能包含26个文件的目录,每个文件对应一个字母。 然后,我可以稍后组合这些文件,因为每个字母的文件都可以加载到内存中。这假设ID首先按字母顺序按字母顺序分布:
outputs = {}
for filename in listdir(directory):
with open(filename) as f:
for line in f:
if line[0] not in outputs:
outputs[line[0]] = open('sorted_' + line[0] + '.txt', 'w')
outputs[line[0]].write(line)
_ = [v.close() for v in outputs.itervalues()]
(then sort individually and concat the newly categorized files)
我的问题是:新26个文件的内容有多少被保存在内存中?是立即写入文件,还是仅在关闭后实际写入?
我注意到,通常如果我cat
在另一个终端窗口中创建文件,它实际上不会包含您要在其中调用.close()
之前写入的内容。但他们可以保存在临时文件中,我不确定。
这只是将所有内容保存在内存中,因而效率极低吗?