为了账号安全,请及时绑定邮箱和手机立即绑定

使用Python对文本文件进行排序

使用Python对文本文件进行排序

我的文本文件包含超过一千万行。像这样的行:37024469;196672001;255.000000000037024469;196665001;396.000000000037024469;196664001;396.000000000037024469;196399002;85.000000000037024469;160507001;264.000000000037024469;160506001;264.0000000000如您所见,定界符为“;”。我想根据第二个元素使用python对文本文件进行排序。我无法使用拆分功能。因为它导致MemoryError。我该如何管理?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

不要在内存中排序1000万行。分批拆分:

  • 运行100 100k行排序(使用文件作为迭代器,结合islice()或类似地选择批处理)。写出单独的文件放在其他位置。

  • 合并排序的文件。这是一个合并生成器,您可以传递100个打开的文件,并按排序的顺序显示行。逐行写入新文件:

    import operatordef mergeiter(*iterables, **kwargs):
        """Given a set of sorted iterables, yield the next value in merged order
    
        Takes an optional `key` callable to compare values by.
        """
        iterables = [iter(it) for it in iterables]
        iterables = {i: [next(it), i, it] for i, it in enumerate(iterables)}
        if 'key' not in kwargs:
            key = operator.itemgetter(0)
        else:
            key = lambda item, key=kwargs['key']: key(item[0])
    
        while True:
            value, i, it = min(iterables.values(), key=key)
            yield value        try:
                iterables[i][0] = next(it)
            except StopIteration:
                del iterables[i]
                if not iterables:
                    raise


查看完整回答
反对 回复 2019-09-26
?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

您可以通过os.system()调用bash函数来实现sort

sort -k2 yourFile.txt


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 2157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信