2013-06-20 49 views
2

我是python的初学者,我需要在一个巨大的txt文件中检查给定字符串的存在。到目前为止,我已经编写了这些代码,它在我的数据库的轻子子样本上运行时没有任何问题。问题是,搜索整个数据库需要超过10个小时,而我正在寻找一种加速此过程的方法。简化txt搜索的python代码

到目前为止,代码从我放在一起的一个txt(list.txt)中读取一个字符串列表,并搜索数据库每行(hugedataset.txt)中的每个项目。我的最终输出应该是数据库中存在的项目列表(或者,不存在的项目列表)。我敢打赌,有一种更有效的方式来做事...

谢谢你的支持!

import re 
fobj_in = open('hugedataset.txt') 
present=[] 

with open('list.txt', 'r') as f: 
    list1 = [line.strip() for line in f] 

print list1 

for l in fobj_in: 
    for title in list1: 
     if title in l: 
      print title 
      present.append(title) 

set=set(presenti) 
print set 
+0

你们需要每行信息?如果你只需要知道每个项目是否在那里,你是不是可以将整个数据库作为一个单独的字符串来搜索,而不是逐行分解它呢? – RichieHindle

+0

其实我不需要每行信息,我需要的只是知道是否已经存在以及哪些字符串已经存在.. – user2447387

+2

由于您只需要知道存在哪些单词,因此不要保留列表和“追加”对它,然后将它转换为最后一组。这意味着你必须跟踪(可能是巨大的)列表,浪费内存。而是保留一个'set'和'add'给它。 – svk

回答

2

既然你不需要任何每行的信息,您可以搜索整个事情一气呵成每串:在这个答案看起来例如

data = open('hugedataset.txt').read() # Assuming it fits in memory 
present=[] # As @svk points out, you could make this a set 

with open('list.txt', 'r') as f: 
    list1 = [line.strip() for line in f] 

print list1 

for title in list1: 
    if title in data: 
     print title 
     present.append(title) 

set=set(present) 
print set 
+0

谢谢!它的工作原理:) – user2447387

+1

@ user2447387您的庞大数据集适合所有内存? –

+0

是的,幸运的是,我只是设法找到一个更轻的版本... – user2447387