我是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)比此文件中的命中要多得多。
有什么想法吗?预先感谢。