如何从大型文本文件中的随机位置进行python正则表达式搜索

时间:2018-10-04 21:07:16

标签: python python-3.x

我是python的新手,但精通regex并熟悉编程概念。我正在尝试在大型文本文件(.rdf)中查找并响应一组描述 collections 层次结构的模式。有一个根集合“ collection_2”,其中可能包含一个或多个 items ,以及一个或多个子集合。等等...

parent collection_2
item_17
child collection_44
item_8
item_251
child collection_10
item_3
item_26
...
parent collection_44
item_19
child collection_5
child collection_21
item_106
item_63
...

请注意,collection_44是collection_2的子代,并且是具有自己的项目和子集合的父项,每个子项和子集合也是父项。我正在尝试将这些集合和项目组合成一个新文件中的真实层次结构。

到目前为止,我的代码是基本的,主要是打印语句来测试我的工作:

import re

rdf_filename = "MyRDF.rdf"
cur_parent = "collection_2"

with open(rdf_filename, "rt", encoding="utf-8") as rdf:
    print("Searching for \"" + cur_parent + "\" in " + rdf_filename)
    if re.search(cur_parent, rdf.read(), re.S):
        print("Found \"" + cur_parent + "\" at index  +, str(rdf.tell()))
        nextindex = str(rdf.tell() + len(cur_parent))
        print("Next search starts at " + nextindex)

找到collection_2之后,我需要递归处理collection_44及其子集合,然后递归处理collection_10,依此类推。

请注意,每个相关行还包含我需要使用的其他数据,因此(最终)是正则表达式。

如果我可以从指定的流位置/索引开始使用re.search(),我想我可以找出其余的内容,但是我不知道如何在文件中间进行模式搜索。我希望尽可能避免读取和搜索每一行,因为不相关的行(20k)比此文件中的命中要多得多。

有什么想法吗?预先感谢。

0 个答案:

没有答案