parse() is the opposite of format() https://pypi.python.org/pypi/parse
Ich habe gelernt, dass es eine Möglichkeit gibt, aus einer Vorlagenzeichenfolge ein Python-Wörterbuch usw. zu erstellen, indem das Format umgekehrt wird
Ich habe template.txt und result.txt und möchte die {}
Teile in template.txt zu einem Wörterbuch kombinieren.
Die Datei result.txt erfasst jedoch auch alle anderen Standardausgaben usw., ist zum Teil groß und es ist schwierig, die gesamte template.txt zu erstellen. Auch wenn dies nicht der Fall ist, gibt es Zeilen, die sich von Lauf zu Lauf ändern (aber nicht wichtig genug sind, um alle zu erhalten), z. B. Datums- und Laufzeitprotokolle.
Bisher wollte ich es ein wenig einfacher machen, als ich es jedes Mal mit einem Shell-Skript mit awk oder sed halb manuell gemacht habe.
Ein Bild, das jede Zeile von template.txt analysiert, während es in jede Zeile von result.txt gefaltet wird, und alle übereinstimmenden Zeilen kombiniert und extrahiert. Sowohl Map als auch Reduce hören nicht auf, auch wenn None in der Mitte angezeigt wird. Dies ist sehr verschwenderisch, aber wenn Sie keine Leistung in diesem Ausmaß anstreben ... (Ich habe es mit einer Doppelschleife nicht richtig gemacht ...: durchhalten :)
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
Die Zusammenfassung befindet sich normalerweise am Ende, daher scheint es am Ende schneller zu sein
Parse ist die umgekehrte Konvertierung des Formats, aber wenn es so etwas wie die umgekehrte Konvertierung von Jinja2 gibt, denke ich, dass es einen Benutzer gibt, aber gibt es so etwas?
Beschreiben Sie im Protokoll zum Zeitpunkt der Ausführung den Teil, von dem Sie nicht genau wissen, wie viele Zeilen mit so etwas wie "{% für%}" angezeigt werden, und geben Sie ihn als Liste aus.
Schließen Sie das Protokoll, das nur zum Zeitpunkt des Fehlers angezeigt wird, in einen {% if%}
Block ein, um den Fehler zu erkennen.
(Übrigens habe ich Jinja noch nie benutzt, also spreche ich komplett darüber.)