python-Ersatz für perl-format-write

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rjackmuc
User
Beiträge: 4
Registriert: Montag 24. Januar 2022, 11:02

Hallo liebe Leute,

ich bin neu hier und habe lange Zeit perl verwendet.
Diese Skriptings wären in der nächsten Zeit zu übergeben.
(Der Nachfolger steht noch nicht fest.)
Um demjenigen nicht zuzumuten für diese alten Skripte (von 2007) perl zu lernen,
überlege ich mir diese nach Python umzusetzen, wenn mir Zeit dafür bleibt.
(Python eigene ich mir gerade an. Ich verwende ISBN 978-3-446-45208-4)

Ein erheblicher Teil der alten Skripte gibt (lange) Datensätze mit Feldern fester Feldlänge
(ohne Trennzeichen) aus. Das geschieht in perl mittels Definition eines Formats mit
Verwendung einer Variablenzeile und Ausgabe durch write.
(S. a. http://perl-seiten.privat.t-online.de/h ... ormat.html)
Über „Formatierte Ausgabe und Strings formtieren“ in Python
habe ich in oben genanntem Buch schon gelesen.

Meine Frage: gibt es über das was im vorgenannten Kapitel steht hinaus in Python eine Bibliothek o.ä.
die die format-write-Vorgehensweise von perl noch näher unterstützt?
Man kann natürlich auch selber was schreiben, aber vielleicht hatte schon jemand dieses Problem?

Vielen Dank im Voraus und beste Grüße
rjackmuc :)
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ein Blick in https://perldoc.perl.org/perlform zeigt, dass das doch schon relativ komplex ist was man da machen kann. Eine Python-Bibliothek, die das alles unterstützt wäre mir nicht bekannt. Das ist ja so ein bisschen wie ein Templatesystem für reinen Text mit festen Feldlängen, aber auch mit Möglichkeiten Zahlen zu formatieren. Das geht so in Richtung alte (Text-)Report-Generatoren/COBOL/FORTRAN und ein bisschen PRINT USING in einigen BASIC-Dialekten.

Grundsätzlich würde ich sagen f-Zeichenkettenliterale und die `format()`-Methode und die ”Minisprache” zur Präzisierung der Formatierung (das nach dem ":" für die Platzhalter) ist so in etwa das was Python zur Verfügung stellt. Und externe Templating-Bibliotheken, die aber eher nicht mehr für so reine Textformate mit festen Feldlängen ausgelegt sind.

Bei `format()` & Co ist wahrscheinlich ein Problem wie mit Daten umgegangen wird die Länger als der vorgesehene Platz ist. Die werden dann einfach länger, während bei diesen ”Ausgabemasken” in Sprachen die das haben, üblicherweise die Ausgabe hart begrenzt ist. Also entweder einfach abgeschnitten wird, oder es werden besondere Zeichen ausgegeben, damit der Leser sieht, dass da ein Wert nicht gepasst hat.

Je nach dem was genau man von Perl's `format` hier braucht, würde man sich wahrscheinlich einfach ein paar Hilfsfunktionen in Python schreiben.

Eventuell wäre so etwas interessant: https://pypi.org/project/FixedWidth/
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
rjackmuc
User
Beiträge: 4
Registriert: Montag 24. Januar 2022, 11:02

Hallo blackjack,

herzlichen Dank für die Auskünfte und die Mühe,
rjackmuc :)
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Eine Nebenbemerkung: Ich war schon in der Umgekehrten Situation und kann nur sagen, dass man meiner Erfahrung nach mit Perl eigentlich ganz gut klar kommen kann, wenn man Python beherrscht und auch schon mal ein, zwei andere Sprachen gesehen hat. Es gibt zwar schon ein paar Spezialitäten, aber wenn man bereit ist, da mal ein Tutorial durchzuarbeiten, ist das eigentlich machbar. Insofern würde ich mir da keine zu großen Sorgen machen. Gute Dokumentation und aufgeräumten Code finde ich persönlich viel wichtiger. Ich glaube auch, dass man teilweise schon recht gut Python beherrschen muss, um einige Sachen, die ich aus Perl kenne, in idiomatisches Python übersetzen zu können. Da Perl-Kenntnisse eher weniger werden, kann man natürlich schon überlegen, ob man das mittelfristig migrieren möchte. Aber das kann ja dann vielleicht die/der Nachfolgerin in Ruhe machen.
Antworten