我的文本文件包含超過一千萬行。像這樣的行: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
添加回答
舉報
0/150
提交
取消