Python文件写入内存使用情况

Lit*_*les 6 python memory file-writing

我有一些巨大的未排序 ID 文件,例如:

file1.txt
a1
a2
a3...etc

file2.txt
b1
a2
c1...etc
Run Code Online (Sandbox Code Playgroud)

我试图最终把它们放在一个单独的、排序的文件中。它们每个都有多个 GB,因此我无法将它们全部加载到内存中。

我当前的解决方案是根据每个 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)
Run Code Online (Sandbox Code Playgroud)

我的问题是:新的 26 个文件中有多少内容保存在内存中?它是立即写入文件,还是仅在关闭后才真正写入?

我注意到通常如果我cat在另一个终端窗口中创建文件,它实际上并不包含您想要写入的内容,直到.close()被调用。但是它们可以保存在一个临时文件中,我不确定。

这是否只是将所有内容都保存在内存中,因此效率极低?