2015-08-20 4 views
5

Ich habe eine lange Saite, die ich gerne in Stücke zerlegen würde, mit max. X Zeichen. ABER, nur bei einem Leerzeichen (wenn ein Wort in der Zeichenfolge länger als X Zeichen ist, lege es einfach in ein eigenes Stück).Zerlege eine Saite in Stücke mit maximaler Länge X - Teile nur in Räume

Ich weiß nicht einmal, wie diese beginnen zu tun ... Pythonically

Pseudocode:

declare a list 
while still some string left: 
    take the fist X chars of the string 
    find the last space in that 
    write everything before the space to a new list entry 
    delete everything to the left of the space 

Bevor ich, dass Code auf, gibt es einige Python-Modul, das mir helfen kann (Ich glaube nicht, dass pprint kann)?

+4

ich erst vor kurzem herausgefunden, dass Python eine hat [TextWrap] (https://docs.python.org/3.5/ library/textwrap.html # module-textwrap) Modul;) – swenzel

Antwort

13

So würde ich es angehen: Teilen Sie zuerst den Text in Wörter auf. Beginnen Sie mit dem ersten Wort in einer Zeile und wiederholen Sie die restlichen Wörter. Wenn das nächste Wort auf die aktuelle Zeile passt, fügen Sie es hinzu, andernfalls beenden Sie die aktuelle Zeile und verwenden Sie das Wort als erstes Wort für die nächste Zeile. Wiederholen Sie diesen Vorgang, bis alle Wörter aufgebraucht sind.

Hier einige Code:

text = "hello, this is some text to break up, with some reeeeeeeeeaaaaaaally long words." 
n = 16 

words = iter(text.split()) 
lines, current = [], next(words) 
for word in words: 
    if len(current) + 1 + len(word) > n: 
     lines.append(current) 
     current = word 
    else: 
     current += " " + word 
lines.append(current) 

Update: Wie in den Kommentaren von @swenzel wies darauf hin, in der Tat gibt es ein Modul für das heißt: textwrap. Dies wird das gleiche Ergebnis wie oben Code erzeugen (und es bricht auch auf Bindestriche):

import textwrap 
lines = textwrap.wrap(text, n, break_long_words=False) 
+0

Das sieht nach einem besseren Algorithmus aus als meiner (+1) – Mawg

Verwandte Themen