第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用Python對(duì)文本文件進(jìn)行排序

使用Python對(duì)文本文件進(jìn)行排序

我的文本文件包含超過(guò)一千萬(wàn)行。像這樣的行:37024469;196672001;255.000000000037024469;196665001;396.000000000037024469;196664001;396.000000000037024469;196399002;85.000000000037024469;160507001;264.000000000037024469;160506001;264.0000000000如您所見,定界符為“;”。我想根據(jù)第二個(gè)元素使用python對(duì)文本文件進(jìn)行排序。我無(wú)法使用拆分功能。因?yàn)樗鼘?dǎo)致MemoryError。我該如何管理?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

不要在內(nèi)存中排序1000萬(wàn)行。分批拆分:

  • 運(yùn)行100 100k行排序(使用文件作為迭代器,結(jié)合islice()或類似地選擇批處理)。寫出單獨(dú)的文件放在其他位置。

  • 合并排序的文件。這是一個(gè)合并生成器,您可以傳遞100個(gè)打開的文件,并按排序的順序顯示行。逐行寫入新文件:

    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


查看完整回答
反對(duì) 回復(fù) 2019-09-26
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

您可以通過(guò)os.system()調(diào)用bash函數(shù)來(lái)實(shí)現(xiàn)sort

sort -k2 yourFile.txt


查看完整回答
反對(duì) 回復(fù) 2019-09-26
  • 3 回答
  • 0 關(guān)注
  • 2248 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)