parse() is the opposite of format() https://pypi.python.org/pypi/parse
J'ai appris qu'il existe un moyen de créer un dictionnaire python, etc. à partir d'une chaîne de caractères de modèle en faisant l'inverse du format
J'ai template.txt et result.txt, et je veux combiner les parties `` {} '' de template.txt dans un dictionnaire.
Cependant, result.txt capture également toutes les autres sorties standard, etc., il est volumineux dans une certaine mesure et il est difficile de créer tout le template.txt. Même si ce n'est pas le cas, il y a des lignes qui changent d'une exécution à l'autre (mais qui ne sont pas assez importantes pour les obtenir toutes), telles que les journaux de date et d'heure d'exécution.
Jusqu'à présent, je voulais le rendre un peu plus facile que je ne le faisais à moitié manuellement à chaque fois avec un script shell utilisant awk ou sed.
Une image qui analyse chaque ligne de template.txt tout en la repliant dans chaque ligne de result.txt, et combine et extrait toutes les lignes correspondantes. La carte et la réduction ne s'arrêtent pas même si None apparaît au milieu, donc c'est très gaspilleur, mais si vous ne recherchez pas les performances à ce point ... (Je n'ai pas réussi avec une double boucle ...: persévérez :)
from parse import *
from parse import compile
def coerce_res(a, b):
try:
a.named.update(b.named)
a.fixed = a.fixed + b.fixed
return a
except:
return None
def match():
with open('template.txt', 'r') as ftemp, open('result.txt', 'r') as flog:
templines = ftemp.readlines()
# todo: remove leading & trailing blank lines from templines
loglines = flog.readlines()
for i in range(len(loglines) - len(templines) + 1):
a = map(lambda (x,y) : parse(x,y), zip(templines, loglines[i:]))
b = reduce(coerce_res, a)
if(b):
return b
print match()
# print fixed, named
Le résumé est généralement à la fin, il semble donc plus rapide de le faire de la fin
parse est la conversion inverse du format, mais s'il y a quelque chose comme la conversion inverse de Jinja2, je pense qu'il y a un utilisateur, mais y a-t-il une telle chose?
Dans le journal au moment de l'exécution, décrivez la partie dont vous ne savez pas exactement combien de lignes vont apparaître avec quelque chose comme {% for%} '' et affichez-la sous forme de liste. Placez le journal qui apparaît uniquement au moment de l'échec dans un bloc
{% if%} '' pour détecter l'échec.
(Au fait, je n'ai jamais utilisé Jinja auparavant, donc j'en parle complètement.)