亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用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條經驗 獲得超7個贊

您可以通過os.system()調用bash函數來實現sort

sort -k2 yourFile.txt


查看完整回答
反對 回復 2019-09-26
  • 3 回答
  • 0 關注
  • 2249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號