Python大型文本文件搜索
我有一个500 MB的文本文件,是很久以前制作的。它具有类似于html或xml标记的内容,但它们在整个文件中并不一致。我试图在两个不匹配的标记之间查找信息。我现在使用的东西很有效,但速度很慢:myDict有一个关键字列表。我只能保证X+键和/N存在。没有其他一致的标记。这本字典有18000把钥匙Python大型文本文件搜索,python,search,text,Python,Search,Text,我有一个500 MB的文本文件,是很久以前制作的。它具有类似于html或xml标记的内容,但它们在整个文件中并不一致。我试图在两个不匹配的标记之间查找信息。我现在使用的东西很有效,但速度很慢:myDict有一个关键字列表。我只能保证X+键和/N存在。没有其他一致的标记。这本字典有18000把钥匙 for key in myDict: start_position = 0 start_position = the_whole_file.find('<X>'+key,
for key in myDict:
start_position = 0
start_position = the_whole_file.find('<X>'+key, start_position)
end_position = the_whole_file.find('</N>', start_position)
date = the_whole_file[start_position:end_position]
myDict中的键的:
起始位置=0
开始位置=整个文件。查找(“”+键,开始位置)
结束位置=整个文件。查找(“”,开始位置)
日期=整个文件[开始位置:结束位置]
有什么方法可以更快地完成这项工作吗?与您现在的做法相反,而不是反复浏览字典并搜索可能的匹配项。遍历可能的匹配项并搜索字典
import re
for part in re.findall("\<X\>(.*)\<\/N\>",the_whole_text):
key = part.split(" ",1)[0]
if key in my_dict:
do_something(part)
重新导入
对于re.findall中的部分(“\(.*)\”,全文):
键=部分拆分(“,1)[0]
如果输入my_dict:
做某事(部分)
因为字典查找是O(1)
,而不是O(N)
的字符串查找(在整个文件中搜索每个键是昂贵的…)
因此,搜索文件内容是~O(500000000)
,而您正在这样做18000次
这样,您只需搜索一次文件,就可以找到所有潜在的。。。然后查找每个文件,查看其是否在数据字典中始终可以逐行读取文件,而不是将整个文件存储在内存中:
import re
for part in re.findall("\<X\>(.*)\<\/N\>",the_whole_text):
key = part.split(" ",1)[0]
if key in my_dict:
do_something(part)
inside_tag = False
data = ''
with open(your file, 'r') as fil:
for line in fil:
if '</N>' in line:
data += line.split('<X>')[0]
print data
inside_tag = False
if inside_tag:
data += line
if '<X>' in line:
data = line.split('<X>')[-1]
inside_tag = True
内部标签=False
数据=“”
以文件形式打开(您的文件“r”):
对于fil中的行:
如果“”在第行中:
数据+=行分割(“”)[0]
打印数据
内部标签=假
如果在标签内:
数据+=行
如果“”在第行中:
数据=行分割(“”)[-1]
内部标记=真
请注意,当开始和结束标记位于同一行时,这不起作用。hmmm什么?所以你在寻找一些你可能想要的数据,如果你在dict中输入?500MB没有那么大…这几乎肯定不是问题。。。500MB不够公平。。。无论如何,这不是一个很好的答案:-)