Zeilenumbruch langer Zeilen in Python (Software)

Martin Vogel ⌂ @, Dortmund / Bochum, Thu, 25.01.2018, 17:08 (vor 2254 Tagen)

Falls jemand zufällig gerade eine Python-Funktion braucht, um längere Texte auszugeben, ohne dabei eine bestimmte Zeilenlänge zu überschreiten und dadurch Wörter am Fensterrand entzweizureißen:

  1. def zeilenumbruch(s, l=79):
  2. aus = ""
  3. while len(s) > l:
  4. p = l-1
  5. while p > 0 and s[p] not in " -":
  6. p -= 1
  7. if p == 0:
  8. p = l
  9. aus += s[:p+1] + "\n"
  10. s = s[p+1:]
  11. return aus+s
  12.  
  13. bt = ("Er hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. "
  14. "Wer würde ihm schon folgen, spät in der Nacht und dazu noch in dieser "
  15. "engen Gasse mitten im übel beleumundeten Hafenviertel? Gerade jetzt, wo "
  16. "er das Ding seines Lebens gedreht hatte und mit der Beute verschwinden "
  17. "wollte! Hatte einer seiner zahllosen Kollegen dieselbe Idee gehabt, ihn "
  18. "beobachtet und abgewartet, um ihn nun um die Früchte seiner Arbeit zu "
  19. "erleichtern? Oder gehörten die Schritte hinter ihm zu einem der "
  20. "unzähligen Gesetzeshüter dieser Stadt, und die stählerne Acht um seine "
  21. "Handgelenke würde gleich zuschnappen? Er konnte die Aufforderung stehen "
  22. "zu bleiben schon hören. Gehetzt sah er sich um. Plötzlich erblickte er "
  23. "den schmalen Durchgang. Blitzartig drehte er sich nach rechts und "
  24. "verschwand zwischen den beiden Gebäuden. Beinahe wäre er dabei über den "
  25. "umgestürzten Mülleimer gefallen, der mitten im Weg lag. Er versuchte, "
  26. "sich in der Dunkelheit seinen Weg zu ertasten und erstarrte: "
  27. "Anscheinend gab es keinen anderen Ausweg aus diesem kleinen Hof als den "
  28. "Durchgang, durch den er gekommen war. Die Schritte wurden lauter und "
  29. "lauter, er sah eine dunkle Gestalt um die Ecke biegen. Fieberhaft "
  30. "irrten seine Augen durch die nächtliche Dunkelheit und suchten einen "
  31. "Ausweg. War jetzt wirklich alles vorbei, waren alle Mühe und alle "
  32. "Vorbereitungen umsonst? Er presste sich ganz eng an die Wand hinter "
  33. "ihm und hoffte, der Verfolger würde ihn übersehen, als plötzlich neben "
  34. "ihm mit kaum wahrnehmbarem Quietschen eine Tür im nächtlichen Wind hin "
  35. "und her schwang. Könnte dieses der flehentlich herbeigesehnte Ausweg "
  36. "aus seinem Dilemma sein? Langsam bewegte er sich auf die offene Tür "
  37. "zu, immer dicht an die Mauer gepresst. Würde diese Tür seine Rettung "
  38. "werden?")
  39.  
  40. ut = zeilenumbruch(bt, 32)
  41.  
  42. print(ut)

Die Funktion sucht in Zeilen, die länger als die erlaubte Länge sind, nach dem innerhalb der erlaubten Zeilenlänge am weitesten rechts stehenden Leerzeichen oder Minuszeichen. Hier wird die Zeile getrennt. Der Anfang wandert, um ein Zeilenumbruchzeichen "\n" ergänzt, in die auszugebende Zeichenkette, das Ende wird wieder so wie zuvor untersucht.

Wer lieber fertige Module anstelle eigener Funktionen verwendet, sollte mal einen Blick auf das Textwrap-Modul werfen. Der Zeilenumbruch-Funktion oben entspricht dabei in etwa die Funktion textwrap.fill().

Der spannende Blindtext entstammt übrigens dem Programm Libreoffice Writer.

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Bücher:
CAD mit BricsCAD
Bauinformatik mit Python


gesamter Thread:

 RSS-Feed dieser Diskussion

powered by my little forum