【发布时间】:2012-10-03 07:03:17
【问题描述】:
我有一个 4000 万行、3 GB 的大文本文件(可能无法放入内存),格式如下:
399.4540176 {Some other data}
404.498759292 {Some other data}
408.362737492 {Some other data}
412.832976111 {Some other data}
415.70665675 {Some other data}
419.586515381 {Some other data}
427.316825959 {Some other data}
.......
每一行都以一个数字开头,然后是一些其他数据。数字按排序顺序排列。我需要能够:
- 给定一个数字
x和一个范围y,找出编号在y范围x内的所有行。例如如果x=20和y=5,我需要找到编号在15和25之间的所有行。 - 将这些行存储到另一个单独的文件中。
什么是无需遍历整个文件的有效方法?
【问题讨论】:
-
由于您知道文件的长度并且文件已排序,因此可能是二进制排序的一种变体,以查找范围内具有最小值的行,逐行读取直到到达最大值?
-
对数据进行排序确实很有帮助。您可以尝试的是:在内存中打开一个文件块,比如 512mb 块。然后看看最后的行号是什么。如果它大于您的范围,请在该块中搜索精确的行号,如果不是,则加载下一个块并重复检查。这样你就不会将整个东西加载到内存中,但是当你找到一个块时,工作在内存中完成得非常快。如果您的范围跨越多个块,您还需要解决问题,但这是可行的。祝你好运,玩得开心!
-
大概,线条的长度不一样?
-
是的,线条长度不同。
-
您需要对文件进行索引,请参阅下面我的回答以了解两种可能性。
标签: python search large-data