我在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中是否有任何内置搜索功能?或者我可以导入的任何库来运行这样的搜索而没有太多的开销?
答案 0 :(得分:2)
正如我已经提到的,当它的大小很重要时,浏览整个文件并不是一个好主意。相反,你应该使用既定的解决方案和:
将数据存储在数据库中比尝试重新发明轮子效率更高。如果您将使用SQLite,则数据库也将是一个文件,因此设置过程很少。
所以再一次,我建议在SQLite数据库中存储单词并查询何时要检查文件中是否存在该单词,然后在添加时更新。
要阅读有关解决方案的更多信息,请参阅此问题的答案:
答案 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