如何在不存储在内存中的情况下将 N 个排序文件合并为一个排序文件?

How to merge N sorted files in to one sorted file without storing in memory?

我有 N 个由换行符分隔的文件。每个文件的 rows/lines 按字典顺序排序(行本身不必排序)。例如:

Include any error messages \n
Include details about your goal \n
Describe expected and actual results \n

如何合并所有多个文件,以便在不将所有文件加载到内存的情况下对输出文件进行排序?

虽然这不是算法问题 本身 ,但它确实让我想起了 Merging K Sorted Linked Lists 的 leetcode 问题。在这种情况下,一个节点将是文件中的一行。

尝试 heapq.merge:

如果您有两个文件:

file1.txt:

aaa
aab
bbb
ooo

file2.txt:

ccc
ddd
zzz

然后:

from heapq import merge

files = ["file1.txt", "file2.txt"]

for m in merge(*map(open, files)):
    print(m.strip())

打印:

aaa
aab
bbb
ccc
ddd
ooo
zzz