【发布时间】:2013-02-27 10:05:19
【问题描述】:
我在 bash 中解决了以下问题,但考虑到我需要减少的文件大小,我觉得它效率很低而且速度很慢。希望有人知道如何在 Python 中做同样的事情并希望加快速度。
最初的问题是减少非常大的文本文件(50-6000 万行,制表符分隔的列)。 其中一列被视为键,即我们确定文件中有多少具有唯一键的行,然后随机选择其中的一个百分比(例如,如果减少 75%,则为总数的四分之一)附加到一个新文件,将保留我们的结果。我们继续检查其余的键,随机化然后将包含每个唯一键的所有行减少相同的百分比。如果无法完成缩减 - 我们只需将所有行转移到生成的文件中。
正如我所说,我的 bash 脚本运行良好,但速度很慢,并且将各种 awk 和 grep 结构串在一起。无论如何,Python 应该以一种更优雅的方式来处理这个问题,并且不会过多地牺牲内存(同样,在这种情况下,我们正在处理 50+ 百万行文件)。 任何建议/技巧都会有所帮助!谢谢!
【问题讨论】:
-
这是一个相当大的文件。根据您拥有的唯一键的数量,仅取所有行的 25% 可能会产生非常相似的结果,而工作量要少得多。这是一个选项,还是您需要确保每个键的比率?
-
您可以使用 OS 工具按键对文件进行排序吗?
-
您是否有足够的 RAM 将任何文件完全读入内存?例如。使用
mylist = open("filename").readlines() -
如果您在一个文本文件中处理一个 6000 万行的数据库,那么您做错了。使用真正的数据库管理器,甚至 SQLite。转换成本极低,而在处理速度和数据可靠性方面的优势却是巨大的。
标签: python parsing text random reduction