如何在python中仅读取特定块内的HTML文件?

如何在python中仅读取特定块内的HTML文件?,python,Python,我试图在python中只读取特定块(jinja模板)中的HTML文件。我想在{%block content%}和它对应的{%endblock%}之间读取 我正在块之间搜索{{和{%,我想打印行号和我找到搜索模式的行的内容 我将文件路径保存在变量中,并在需要时使用它打开文件。我使用枚举函数跟踪行号 fp=r“” def扫描(行号、行、标志): 将open(fp,'r',encoding='utf-8')作为f: 对于检查行编号,请检查枚举(f,1)中的检查行: 如果检查线号>=线号: 如果支票行中

我试图在python中只读取特定块(jinja模板)中的HTML文件。我想在{%block content%}和它对应的{%endblock%}之间读取

我正在块之间搜索{{和{%,我想打印行号和我找到搜索模式的行的内容

我将文件路径保存在变量中,并在需要时使用它打开文件。我使用枚举函数跟踪行号

fp=r“”
def扫描(行号、行、标志):
将open(fp,'r',encoding='utf-8')作为f:
对于检查行编号,请检查枚举(f,1)中的检查行:
如果检查线号>=线号:
如果支票行中的“{%”:
打印(“行号:{}\n内容:{}”。格式(检查行号,检查行))
将open(fp,'r',encoding='utf-8')作为f:
对于第_行,枚举(f,1)中的第行:
如果行中有“{%block content%}”:
标志=1
扫描(行号、行、标志)
我面临的问题是,我的代码会打印出{%block content%}之后出现的所有{%的内容,但我想一直读到相应的{%endblock%}


此外,我不确定在哪里关闭该文件。

使用常规表达式可以轻松解决此问题

import re

# blocks will be a list of the contents of the blocks in the string FILE_CONTENTS
blocks = re.findall(r'{% block \w+? %}(.*?){% endblock %}', FILE_CONTENTS, re.S)

我强烈建议您通读正则表达式模式。它们非常方便。

您能显示您当前获得的输出和所需的输出吗?使用正则表达式我可以获得搜索模式。我还对查找匹配发生的行号感兴趣。我如何才能找到它?然后我认为在每个行号上循环会更容易行并使用正则表达式检查是否有新块。如果有,则设置标志。如果设置了此标志,则将读取的所有内容复制到变量中,例如
block\u text
。在找到
{%endblock%}
后,将标志设置为false。