Python大文本文件搜索

时间:2015-04-08 17:53:50

标签: 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, start_position)

    end_position = the_whole_file.find('</N>', start_position)

    date =  the_whole_file[start_position:end_position]

有没有办法更快地完成这项工作?

2 个答案:

答案 0 :(得分:2)

改变你的方式,而不是遍历字典并搜索潜在的匹配。迭代潜在的匹配并搜索字典

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)

因为字典查找是O(1)而不是字符串查找O(N)(搜索整个文件的每个密钥都很昂贵......)

因此,搜索文件内容为~O(500,000,000),而您正在进行18,000次

这样你只有在找到所有潜力后才搜索文件...然后你查找每个文件以查看它是否在你的数据字典中

答案 1 :(得分:0)

您始终可以逐行读取文件,而不是将整个文件存储在内存中:

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

请注意,当开始和结束标记位于同一行时,这不起作用。