Hallo,
ich möchte gerne in meinem Python Skript ein Logfile erstellen, welches testet, ob die Datei bestimmte Formate einhält. Zum Beispiel dass unterhalb der Überschriften jeweils eine Leerzeile gelassen wird und wenn diese Leerzeile fehlt, soll er ein Logfile ausgeben, in dem steht, dass diese Leerzeile eben fehlt.
Kann mir da jemand helfen bzw einen Ansatz geben?
Grüße
Logging File
Mit logging hat das ja erstmal nichts zu tun. Der erste Schritt besteht in einer Validierung der eingabe, deren Ergebnis man dann weiter verarbeitet. Logging ist eine Möglichkeit, einen Verarbeitungsprozess zu steuern jene andere. Und die Valididierung erfolgt üblicherweise durch das parsen der eingabe, gefolgt von einer Prüfung bestimmter Eigenschaften auf dem durch das parsen erzeugten Datenmodell. Beispiele sind zb XML und die diversen dafür existententen Schema-Spezifikation.
Welches Format liegt denn deinen Dateien zugrunde? Es gibt ja viele, zb Markdown etc. Gibt es dafür bereits einen Parser?
Welches Format liegt denn deinen Dateien zugrunde? Es gibt ja viele, zb Markdown etc. Gibt es dafür bereits einen Parser?
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@EllaBtz: Dazu sind Parser nicht da. Die parsen ein Eingabeformat in eine interne Darstellung. Nach Eigenschaften suchen musst Du schon selbst. Und eventuell sind diese Eigenschaften des Eingabeformats nach dem parsen in der internen Darstellung dann auch gar nicht mehr da, so dass Du Dir selbst einen Parser schreiben musst der die Informationen erhält die Du benötigst um Deine Prüfungen zu machen. Zum Beispiel ist eine Leerzeile zwischen Überschrift und Text in Markdown nicht erforderlich. Eine eventuell vorhandene Leerzeile (oder auch mehrere) werden von den meisten Parsern aber einfach ignoriert/verworfen, denn die trägt nicht zum Endergebnis bei.
Edit: Und nur um mal zu zeigen dass das gar nicht so einfach zu erkennen ist was eine Überschrift ist und was nicht:
Man kann das bei dem Farbschema von dem Syntaxhighligthing hier nicht wirklich gut erkennen, aber der hier verwendete Highlighter bekommt das zum Beispiel schon mal nicht zuverlässig hin wie es aussieht.
Edit: Und nur um mal zu zeigen dass das gar nicht so einfach zu erkennen ist was eine Überschrift ist und was nicht:
Code: Alles auswählen
# Headline
sc
ss
<pre>
# No headline
blah
</pre>
# No headline
foo
# Headline
text
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Die Überschriften sind jeweils mit # versehen, z.b ##Titel##
Löscht man die Leerzeile unterhalb dieser Überschrift, bricht der Parser ab und es entsteht ein Fehler, dann bekomm ich aber nur eine Email mit "Pipeline has failed", ich möchte aber dass dann z.B "Logfile Warning: dont remove empty lines" drinnen steht ..
Löscht man die Leerzeile unterhalb dieser Überschrift, bricht der Parser ab und es entsteht ein Fehler, dann bekomm ich aber nur eine Email mit "Pipeline has failed", ich möchte aber dass dann z.B "Logfile Warning: dont remove empty lines" drinnen steht ..
</>
args.func(args, all_profiles)
File "/src/main.py", line 54, in process_commit
testing(company, profile, args, use_artifacts_dir=True)
File "/builds/src/test.py", line 55, in testing
sed_inplace(maintex, r'{longtable}\[c\]', '{longtable}[]')
File "/builds/src/util.py", line 28, in sed_inplace
with io.open(filename, encoding='utf8') as src_file:
FileNotFoundError: [Errno 2] No such file or directory: 'artifacts/xy.tex'
ERROR: Job failed: exit code 1
</>
Das steht in der Email "Pipeline has failed"
args.func(args, all_profiles)
File "/src/main.py", line 54, in process_commit
testing(company, profile, args, use_artifacts_dir=True)
File "/builds/src/test.py", line 55, in testing
sed_inplace(maintex, r'{longtable}\[c\]', '{longtable}[]')
File "/builds/src/util.py", line 28, in sed_inplace
with io.open(filename, encoding='utf8') as src_file:
FileNotFoundError: [Errno 2] No such file or directory: 'artifacts/xy.tex'
ERROR: Job failed: exit code 1
</>
Das steht in der Email "Pipeline has failed"
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@EllaBtz: So einfach ist das nicht denn wie mein Beispiel zeigt ist nicht alles was mit # versehen ist auch eine Überschrift. Ob Leerzeichen davor sein dürfen wird von unterschiedlichen Parsern unterschiedlich gehandhabt, aber ich habe bisher noch keinen gesehen bei dem nach der Überschrift eine Leerzeile sein muss. Das Original `Markdown.pl` erwartet das nicht, Pandoc auch nicht, ebensowenig StackOverflow.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
- __blackjack__
- User
- Beiträge: 14044
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich frage mich dann auch gerade ob das Problem tatsächlich „keine Leerzeile *nach* einer Überschrift“ ist und nicht eher „keine Leerzeile *vor* etwas“ das eine Leerzeile verlangt‽
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.