在大文件中进行大多数时间有效的搜索 - Python

时间:2017-02-17 14:41:14

标签: python performance search

我在大文本文件中搜索匹配项,但我发现它太慢了。这是文件结构:

word1   5752
word2   96332
word3   137

我正在尝试匹配第一列中的文本,我想在第二列中提取值。列由\ t分隔,大约有1000万行。使用不同的单词多次搜索文件。什么搜索方法具有最佳的时间效率?

编辑:该文件为129 Mb,至少会被搜索数千次。 EDIT2:文件按字母顺序排序,只有在大写字母不同的情况下才能出现多次单词,例如:Word WORD word WOrd将全部为不同的条目。

4 个答案:

答案 0 :(得分:2)

with open('myfile.dat','r') as src:
    mapping = dict((line.strip().split('\t') for line in src if line))

根据文件和内存的大小,这可能是一种解决方案。如果您必须在程序运行期间多次执行此类搜索算法。

答案 1 :(得分:2)

如果将数据存储在哈希表(python词典结构)中,那么执行此操作将非常快。您的“密钥”是名称,每个密钥都有一个“值”,即数字。下面显示的代码利用哈希来加快数据检索:

yourDict = {'name0':number0,'name1':number1,...,'nameN':numberN}
if 'checkName' in yourDict:
    #It exists!
    theNumber = yourDict['checkName']
else:
    #It doesn't exist :/

*注意:如果您使用:

if 'checkName' in yourDict.keys():

您实际上正在创建一个键列表,然后搜索它们。此操作不使用哈希表(慢得多)。

这是关于HandTable Data Structures如何工作的一点: https://www.youtube.com/watch?v=MfhjkfocRR0

这是一个答案,显示python中的字典就像一个哈希表: Is a Python dictionary an example of a hash table?

答案 2 :(得分:1)

这是作业还是工作/项目?我不知道人们对重新实现核心算法的看法,但你的文本文件有多大?

使用Pandas进行易用性和底层优化的替代方法:

<tr ng-repeat="fetched in Movies">

2个问题:

1)这可以保存在内存中而不是每次都重新加载吗? (可能是一个小时的TTL?)

2)您的文件是否排序?我相信二进制搜索需要先排序数据。每次必须读取数据时,对性能的影响是什么?

答案 3 :(得分:0)

我首先按字母顺序对文件进行排序,然后执行对数搜索(https://en.wikipedia.org/wiki/Binary_search_algorithm)。 你有一个很好的例子来说明如何使用python:     http://programarcadegames.com/index.php?chapter=searching&lang=en#section_16.5