python - 如何从大文本文件中的随机位置进行 python 正则表达式搜索
问题描述
我是python的新手,但精通正则表达式并熟悉编程概念。我试图在描述集合层次结构的大型文本文件 (.rdf) 中查找并响应一组模式。有一个根集合“collection_2”,它可能包含一个或多个项目,以及一个或多个子集合。等等...
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,然后递归处理collection_10等。
请注意,每个相关行还包含我需要使用的其他数据,因此是正则表达式(最终)。
如果我可以从指定的流位置/索引开始使用 re.search(),我想我可以弄清楚其余的,但我不知道如何在文件中间进行模式搜索。如果可能,我想避免阅读和搜索每一行,因为不相关的行(20k)比这个文件中的命中要多得多。
有任何想法吗?提前致谢。
解决方案
推荐阅读
- python - Python multiprocessing manger.list() 未正确传递给 Matplotlib.animation
- openssl - ssl_crtd 助手崩溃太快,需要帮助!鱿鱼3.5
- javascript - 事件循环、Promise 和 setTimeout
- apache-spark - 从 hdfs 导入嵌套目录数据集
- flutter - 为什么在颤动中使用图像网络时 gif 渲染没有停止
- docker - 自分配 TLS 证书 traefik
- java - 漂亮的打印和不完整的 XML
- linux - 使用 cat 输出运行 bash 脚本的问题(额外引号)
- css - 到达最后一项时如何停止轮播滑动?
- php - 路由无法在 laravel 中使用 htaccess 正常工作