我在大文本文件中搜索匹配项,但我发现它太慢了。这是文件结构:
word1 5752
word2 96332
word3 137
我正在尝试匹配第一列中的文本,我想在第二列中提取值。列由\ t分隔,大约有1000万行。使用不同的单词多次搜索文件。什么搜索方法具有最佳的时间效率?
编辑:该文件为129 Mb,至少会被搜索数千次。 EDIT2:文件按字母顺序排序,只有在大写字母不同的情况下才能出现多次单词,例如:Word WORD word WOrd将全部为不同的条目。
答案 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