从文件中搜索字符串 - python

时间:2012-09-17 05:55:24

标签: python file search dictionary string-search

我在eng.dic中有一个类似于此的人类词典文件(该列表中的十亿字词附近的图像)。而且我必须经常运行不同的单词查询。

apple
pear
foo
bar
foo bar
dictionary
sentence

我有一个字符串让我们说“foo-bar”,是否有更好的(更有效的方式)搜索该文件以查看它是否存在,如果它返回存在,如果它不存在,则附加字典文件< / p>

dic_file = open('en_dic', 'ra', 'utf8')
query = "foo-bar"
wordlist = list(dic_file.readlines().replace(" ","-"))
en_dic = map(str.strip, wordlist)

if query in en_dic:
    return 1
else:
    print>>dic_file, query

python中是否有任何内置搜索功能?或者我可以导入的任何库来运行这样的搜索而没有太多的开销?

3 个答案:

答案 0 :(得分:2)

正如我已经提到的,当它的大小很重要时,浏览整个文件并不是一个好主意。相反,你应该使用既定的解决方案和:

  1. 索引文档中的单词,
  2. 以适当的形式存储索引结果(我建议数据库),
  3. 检查文件中是否存在该单词(通过检查数据库),
  4. 如果它不存在,请将其添加到文件和数据库
  5. 将数据存储在数据库中比尝试重新发明轮子效率更高。如果您将使用SQLite,则数据库也将是一个文件,因此设置过程很少。

    所以再一次,我建议在SQLite数据库中存储单词并查询何时要检查文件中是否存在该单词,然后在添加时更新

    要阅读有关解决方案的更多信息,请参阅此问题的答案:

      

    The most efficient way to index words in a document

答案 1 :(得分:0)

最有效的方式取决于您将使用此词典执行的最频繁操作。

如果您每次都需要读取文件,可以逐行使用while循环读取文件,直到结果是您在文件末尾的单词。如果您有多个可以同时更新文件的并发工作程序,则必须执行此操作。

如果您不需要每次都读取文件(例如,您只有一个使用字典的进程),您肯定可以编写更有效的实现:1)将所有行读入set(而不是list),2)为每个“新”字执行两项操作 - 使用set操作更新add并将文字写入文件。

答案 2 :(得分:0)

如果它是“非常大”的文件,那么顺序访问这些行并且不要将整个文件读入内存:

with open('largeFile', 'r') as inF:
 for line in inF:
    if 'myString' in line:
        # do_something