如何在不存储在内存中的情况下将 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
我有 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