我试图仅在python中的特定块(jinja模板)内读取HTML文件。我想在{%block content%}和对应的{%endblock%}之间阅读。
我正在搜索块之间的{{和{%,我想打印行号和找到搜索模式的行的内容。
我将文件路径保存在变量中,并在需要时使用它打开文件。我使用枚举功能来跟踪行号。
fp = r"<path_to_HTML_file>"
def scan(line_number, line, flag):
with open(fp, 'r', encoding='utf-8') as f:
for check_line_number, check_line in enumerate(f, 1):
if check_line_number >= line_number:
if '{%' in check_line:
print("Line Number: {}\nContent: {}".format(check_line_number, check_line))
with open(fp, 'r', encoding='utf-8') as f:
for line_number, line in enumerate(f, 1):
if '{% block content %}' in line:
flag = 1
scan(line_number, line, flag)
我面临的问题是我的代码打印出{%块内容%}之后出现的所有{%的出现,但是我想读到相应的{%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)
我强烈建议您阅读正则表达式模式。它们非常方便。