【问题标题】:Merging text files in ascending order of their contents按内容升序合并文本文件
【发布时间】:2012-06-01 18:47:24
【问题描述】:

我想知道你们是否对如何有效地执行此操作有任何意见,我目前有一个使用 Python 集合类的工作实现。

【问题讨论】:

    标签: python sorting merge text-files


    【解决方案1】:

    这取决于你有多少可用内存(当然还有文件的大小)。

    如果您有足够的可用内存,我个人会采取简单的方法并创建所有项目的列表并在它们上执行sort()

    类似这样的:

    # Read all except the first (header) lines
    lines = file('1.txt').readlines()[1:]
    lines += file('2.txt').readlines()[1:]
    
    lines.sort(key=lambda x: int(x.split()[0]))
    
    print ''.join(lines)
    

    lambda 的替代方案:

    def key(x):
        return int(x.split()[0])
    

    【讨论】:

    • 选择这个是因为它是最 Pythonic 的答案,也是我最终使用的一个变体。谢谢你们两个,很好的答案。
    • @Louis93:lambda 函数与普通函数几乎相同,但没有名称。这只是一个接受参数x并返回int(x.split()[0])的函数。
    • @Louis93:为了清楚起见,我添加了普通版本的 lambda :)
    【解决方案2】:
    >>> from itertools import islice
    >>> from operator import itemgetter
    >>> files = ('1.txt','2.txt')
    >>> lines = (map(int,line.split()) for f in files
                 for line in islice(open(f),1,None))
    >>> sorted(lines,key=itemgetter(0))
    [[1, 23112, 3], [2, 32344, 1], [12, 19872, 0], [123, 12243, 1], [221, 39873, 5], [234, 34555, -4]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多