Ich möchte herausfinden, wie man mit Python überflüssige Zeilenumbrüche im Text, wie man sie von Project Gutenberg erhält, entfernt, wo ihre Textdateien alle 70 Zeichen mit Zeilenumbrüchen formatiert sind. In Tcl könnte ich eine einfache string map
machen, so:
Dies würde Absätze getrennt durch zwei Zeilenumbrüche (oder eine neue Zeile und eine Registerkarte) getrennt halten, aber die Zeilen, die mit einer einzigen Zeilenumbrüche enden (die ein Leerzeichen ersetzen), zusammenfassen und überflüssige CRs fallen lassen. Da Python nicht string map
hat, war ich noch nicht in der Lage, den effizientesten Weg zu finden, alle unnötigen Zeilenumbrüche zu löschen, obwohl ich mir ziemlich sicher bin, dass es nicht ist, nur zu suchen jede neue Zeile in der Reihenfolge und ersetzen Sie sie durch ein Leerzeichen. Ich könnte einfach den Tcl-Ausdruck in Python auswerten, wenn alles andere fehlschlägt, aber ich würde gerne den besten pythonischen Weg finden, um dasselbe zu tun. Kann mir hier ein Python-Kenner helfen?
Das nächste Äquivalent zum tcl string map
wäre str.translate , aber leider kann es nur einzelne Charaktere zuordnen. Es wäre also notwendig, eine Regexp zu verwenden, um ein ähnlich kompaktes Beispiel zu erhalten. Dies kann mit Look-Behind / Look-Ahead-Assertions erfolgen, aber die \r
müssen zuerst ersetzt werden:
Ausgabe:
%Vor%Ich bezweifle jedoch, dass dies genauso effizient ist wie der tcl-Code.
AKTUALISIEREN :
Ich habe einen kleinen Test mit diesem Projekt Gutenberg EBook of War and Peace gemacht UTF-8, 3,1 MB). Hier ist mein tcl-Skript:
%Vor%und mein Python-Äquivalent:
%Vor%Grober Leistungstest:
%Vor%Wie erwartet, ist die tcl-Version also effizienter. Die Ausgabe der Python-Version scheint jedoch etwas sauberer zu sein (keine zusätzlichen Leerzeichen am Zeilenanfang).
Ich verwende das folgende Skript, wenn ich dies tun möchte:
%Vor%Tags und Links python