我会根据长度将它们分成单独的文件,然后将它们重新组合在一起 - 例如:
from tempfile import TemporaryFile
from itertools import chain
保留文件长度->输出文件的参考字典。在文件已经打开的地方,然后写入它,或者创建一个新的临时文件。
output = {}
with open('input') as fin:
for line in fin:
length = len(line.split())
output.setdefault(length, TemporaryFile()).write(line)
正如 Steven Rumbalski 所指出的,这也可以通过以下方式完成defaultdict
:
from collections import defaultdict
output = defaultdict(TemporaryFile)
...
output[length].write(line)
临时文件都将指向文件的末尾。将它们重置为开头,以便在阅读它们时我们再次获得数据......
for fh in output.values():
fh.seek(0)
按长度递增的顺序从每个文件中取出行......并将它们全部写入最终输出文件。
with open('output', 'w') as fout:
fout.writelines(chain.from_iterable(v for k,v in sorted(output.iteritems())))
然后 Python 应该在程序退出时清理临时文件......