J'essaie de lire un fichier HTML uniquement dans un bloc spécifique (modèle jinja) en python. Je veux lire entre {% block content%} et son {% endblock%} correspondant.
Je recherche {{et {% entre les blocs et je veux imprimer le numéro de ligne et le contenu de la ligne où je trouve les modèles de recherche.
J'enregistre le chemin du fichier dans une variable et l'utilise pour ouvrir le fichier quand j'ai besoin. J'utilise la fonction énumérer pour garder une trace du numéro de ligne.
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)
Le problème auquel je suis confronté est que mon code imprime toutes les occurrences de {% présentes après {% block content%}, mais je veux lire jusqu'au {% endblock%} correspondant.
De plus, je ne sais pas où fermer le fichier.
1 réponse
Ce problème pourrait être facilement résolu à l'aide d'expressions régulières.
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)
Je vous suggère fortement de lire les schémas d'expression rationnelle. Ils sont assez pratiques.
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.