猿问

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

我的文本文件包含超过一千万行。像这样的行:

37024469;196672001;255.000000000037024469;196665001;396.000000000037024469;196664001;396.000000000037024469;196399002;85.000000000037024469;160507001;264.000000000037024469;160506001;264.0000000000

如您所见,定界符为“;”。我想根据第二个元素使用python对文本文件进行排序。我无法使用拆分功能。因为它导致MemoryError。我该如何管理?


慕侠2389804
浏览 2218回答 3
3回答

犯罪嫌疑人X

不要在内存中排序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

qq_花开花谢_0

您可以通过os.system()调用bash函数来实现sortsort -k2 yourFile.txt
随时随地看视频慕课网APP
我要回答