当前位置: 首页 > 知识库问答 >
问题:

大文件中最高效的搜索-Python

吴和硕
2023-03-14

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

word1   5752
word2   96332
word3   137

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

编辑:文件大小为129 Mb,将被搜索至少数千次。EDIT2:文件是按字母顺序排序的,只有当单词有不同的大写字母时,它们才能出现多次。例如:单词都是不同的条目。

共有3个答案

锺离晗昱
2023-03-14

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

使用Pandas的另一种方法易于使用和底层优化:

In [61]: df = pd.read_csv(r'C:\temp\data.txt', header=None, sep='  ')

In [62]: df
Out[62]:
       0      1
0  word1   5752
1  word2  96332
2  word3    137

In [63]: df[df[0] == 'word2']
Out[63]:
       0      1
1  word2  96332

In [64]: df[df[0] == 'word2'][1]
Out[64]:
1    96332
Name: 1, dtype: int64

2个问题:

1) 是否可以将其保存在内存中,而不是每次重新加载?(可能TTL大约一个小时?)

2) 你的文件分类了吗?我认为二进制搜索首先需要对数据进行排序。每次必须读取数据时进行排序会对性能产生什么影响?

狄阳华
2023-03-14

如果将数据存储在哈希表(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():

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

这是关于手持数据结构如何工作的一点:https://www.youtube.com/watch?v=MfhjkfocRR0

这是一个显示python中的字典类似于哈希表的答案:Python字典是哈希表的示例吗?

丁长卿
2023-03-14
with open('myfile.dat','r') as src:
    mapping = dict((line.strip().split('\t') for line in src if line))

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

 类似资料:
  • 问题内容: 据我所见,内置实现是一个迭代的实现:python docs python是否有实现用于查找子字符串的更充分技术的实现:Boyer- Moore算法 , Rabin-Karp算法等… ??? 问题答案: 实际的cpython字符串搜索实现在这里: http://hg.python.org/cpython/file/tip/Objects/stringlib/fastsearch.h 它似

  • 问题内容: -我只是解析了一个大文件,然后创建了一个包含42.000个字符串/单词的列表。我想查询[针对此列表]以检查给定的单词/字符串是否属于它。所以我的问题是: 进行查找的最有效方法是什么? 第一种方法是对列表()进行排序,然后使用 这确实是微不足道的,我相信有更好的方法可以做到。我的目标是应用快速查找来查找给定字符串是否在此列表中。如果您对其他数据结构有任何想法,欢迎使用。但是,我现在想避免

  • 问题内容: 我有一个数据库,其中有75,000+行,每天添加500多个条目。 每行都有标题和描述。 我创建了一个RSS feed,为您提供了特定搜索词的最新条目(例如,http://site.com/rss.rss?q = Pizza将为搜索词“ Pizza”输出RSS)。 我想知道什么是为此编写SQL查询的最佳方法。现在我有: 但是问题是执行查询需要2到10秒。 有没有更好的方法来编写查询,我是

  • 问题内容: 现在,我执行两个单独的SQL语句,一个执行与搜索语句基本相同的条件。我并不是最擅长做出这些陈述,有时会有点慢,我想知道是否有更好的方法来做我所做的事情。可能只执行一个SQL语句,并在PHP中做更多工作?这是我有陈述的“搜索包含”示例。 在第二条语句中,您将看到Y之间的X,这部分是由第一行计数语句的结果计算得出的。 SQL行数: SQL搜索: 问题答案: 如果您要显示结果的总计数和分页计

  • 本文向大家介绍在Javascript二进制搜索树中搜索最小值和最大值,包括了在Javascript二进制搜索树中搜索最小值和最大值的使用技巧和注意事项,需要的朋友参考一下 在二元搜索树中,如果我们查看左孩子总是比父孩子小的属性,我们会发现,如果继续向左孩子迭代直到到达没有左孩子的节点,我们基本上会发现BST中最小的元素。 让我们在代码中实现此功能。从现在开始,我们将仅实现该函数的单个版本,即迭代或

  • 本文向大家介绍solr 提高搜索条件,包括了solr 提高搜索条件的使用技巧和注意事项,需要的朋友参考一下 示例 name:(john doe^5) 该^指标可以用来提高搜索项,以增加它的重要级别的含义,包含文件母鹿更多相关比含那些约翰