0

我有一个排序文件列表,其中数据由 '\n' 分隔我想将它们合并在一起以获得单个排序文件。我不想一次加载所有文件的内容。我正在使用heapq 库的合并功能

我写了以下代码

def merge(*flist):
    for element in heapq.merge(*flist):
        yield element

其中 *flist 是这样的元组 -

(<open file '/tmp/000000', mode 'w+b' at 0xb73eba70>,
<open file '/tmp/000001', mode 'w+b' at 0xb73ebac8>, 
<open file '/tmp/000002', mode 'w+b' at 0xb73ebb20>, 
<open file '/tmp/000003', mode 'w+b' at 0xb73ebb78>, 
<open file '/tmp/000004', mode 'w+b' at 0xb73ebc80>)

当我在循环中打印上面的元素时,我得到值'2\n','44\n'。输出文件也不按排序顺序。我认为问题是由于换行符造成的。如何解决这个问题。

我试图从很长一段时间内解决此问题,但无法解决

4

1 回答 1

5

将您的输入行转换为整数以获得数字排序而不是字符串排序:

def merge(*flist):
    return heapq.merge(*[itertools.imap(int, f) for f in flist])

请注意,遍历迭代heapq.merge器并产生每个元素是没有意义的。您可以只返回迭代器并保存一层间接。(事实上​​,你的函数的原始版本可以在heapq.merge不改变调用站点的情况下被替换。)

于 2013-09-07T06:31:41.780 回答