Python Programmierung - Teil eines Strings entfernen?

2 Antworten

Ich würde mal davon ausgehen, dass die Wörter jeweils durch ein Leerzeichen (oder anderem Whitespace) voneinander getrennt sind. Dann könnte man beispielsweise sowas machen:

ab_sechstem_wort = langer_string.split(maxsplit = 5)[-1]

Dabei wird der String langer_string an den ersten 5 Leerzeichen (oder anderem Whitespace) aufgeteilt und dann der letzte Teil in der Variable ab_sechstem_wort abgespeichert.

[Bemerkung: Wenn es weniger als 6 Wörter sind, wird der letzte Teil ausgegeben, auch wenn es evtl. nur das erste/zweite/dritte/vierte/fünfte Wort ist.]

Beispiel:

langer_string = "Ab cd ef gh ij kl. Mn op qr st uv wx yz."
ab_sechstem_wort = langer_string.split(maxsplit = 5)[-1]

print("Langer String:", langer_string)
print("Ab dem sechsten Wort:", ab_sechstem_wort)

Entsprechender Output:

Langer String: Ab cd ef gh ij kl. Mn op qr st uv wx yz.
Ab dem sechsten Wort: kl. Mn op qr st uv wx yz.
ThePeanutt 
Fragesteller
 13.03.2022, 02:12

Vielen Dank, ich habe meine Textdatei in Form einer Liste eingelesen und würde nun gerne in jeder einzelnen Zeile den Anfang abschneiden. Wie genau müsste ich es dabei machen?

0
mihisu  13.03.2022, 13:14
@ThePeanutt

Wie meinst du das mit „in Form einer Liste eingelesen“. Ich vermute, die einzelnen Einträge der Liste sind die einzelnen Zeilen der Textdatei, oder? Also wenn die Liste beispielsweise mit f.readlines() entsteht.

Und mit „den Anfang abschneiden“, meinst du vermutlich die ersten fünf Wörter wegschneiden, ähnlich wie bei deiner Frage, oder?

Dann könnte man das beispielsweise so machen...

def anfang_abschneiden(text, n_wörter, default=""):
    # Entfernt die ersten n_wörter Wörter aus dem String text und gibt den so
    # entstandenen String als Rückgabewert zurück.
    # Dabei wird davon ausgegangen, dass die Wörter durch Whitespace
    # voneinander getrennt sind.
    # Falls sich insgesamt weniger als n_wörter Wörter in dem Text befinden,
    # wird der String default zurückgegeben.
    splitter = text.split(maxsplit = n_wörter)
    if len(splitter) > n_wörter:
        return(splitter[-1])
    else:
        return(default)


with open("textdatei.txt") as f:
    liste = f.readlines()


liste_abgeschnitten = [anfang_abschneiden(text, 5, "\n") for text in liste]

Zunächst einmal habe ich eine Funktion anfang_abschneiden() definiert, welche mir bei einem String die ersten Wörter wegschneiden kann.

Dann habe ich die Zeilen der Textdatei textdatei.txt als Liste liste eingelesen. (Das kannst du ja weglassen, wenn du bereits deine Liste hast, mit der du weiterarbeiten möchtest.)

Schließlich habe ich mir eine neue Liste liste_abgeschnitten erstellen lassen, indem ich mit einer List-Comprehension die einzelnen Strings der Liste liste durchgegangen, habe jeweils die ersten 5 Wörter weggeschnitten, und aus den so erhaltenen neuen Strings die neue Liste habe aufbauen lassen.

0
[" ".join(string.split(" ")[5:]) for string in strings]

Beispiel-Programm:

strings = ["a b c d e f g h i j", "p q r s t u v w"]
print([" ".join(string.split(" ")[5:]) for string in strings])

Kannst du hier testen, dann musst du nicht extra 'ne neue Datei machen usw. : https://www.programiz.com/python-programming/online-compiler/

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
ThePeanutt 
Fragesteller
 07.03.2022, 00:23

Vielen vielen Dank für die Mühe! Klappt super!

1
ThePeanutt 
Fragesteller
 13.03.2022, 02:13

Ich hätte da noch eine Frage, ich habe meine Textdatei in Form einer Liste eingelesen und würde nun gerne in jeder einzelnen Zeile den Anfang abschneiden. Wie genau müsste ich es dabei machen? Hätte da noch eine kleine Frage zu. Ich habe ein Textdokument mit

0