【发布时间】:2013-11-04 09:19:58
【问题描述】:
我总是使用这个命令行来排序和只获取 uniq 行,即使是大文件(超过 500,000 行),它也可以作为一种魅力
sort filename.txt | uniq | sponge filename.txt
最短的等效python代码是
f = open("filename.txt", "r")
lines = [line for line in f]
lines = lines.sort()
lines = set(lines)
但是由于内存限制,这当然是不可扩展的,并且在 python 中编写可扩展的代码需要时间 ,所以我想知道python中最短的等效代码(包)是什么
【问题讨论】:
-
sort在对大文件进行排序时会创建临时文件来保存中间结果,因此并不是那么简单。为什么要重新发明轮子? -
在
sort调用之前应用set,这将减少NlogN中的N。 -
@HadyElsahar:我很困惑。如果不想重新发明轮子,为什么要在 Python 中重写
sort | uniq? -
@HadyElsahar:调用外部命令没有错。如果您不想将结果写入文件,请从进程的标准输出中读取(尽管如果它的写入速度快于您的读取速度,您可能会遇到缓冲问题)。
sort和uniq是可移植的,运行速度比任何纯 Python 代码都要快。 -
@HadyElsahar:有些模块会包装
subprocess以使其更漂亮,如果这让您望而却步:amoffat.github.io/sh
标签: python command-line unique