Seite 1 von 1

Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 14:31
von kaddi789
Hallo,

ich versuche gerade, in einem String eine Wörterkette zu suchen und dahinter einen Punkt zu hängen.
Das Problem ist, dass 'element' hier immer nur ein Buchstabe ist, deshalb funktioniert das nicht, schreibe ich anstatt 'Der Teufel in London' nur 'd', funktioniert das Ganze. Aber ich brauche leider immer mehrere Zeichen.. hat jemand eine Ahnung wie ich das hinkriegen könnte? :/
(kapitelliste ist hier eine Liste, in der je ein Kapitel eines Buches in Form eines strings steht und string ist einfach der string, in das ich das Ganze neu reinschreiben möchte..)

Code: Alles auswählen

string = ''
for einkapitel in kapitelliste:
     for element in einkapitel:
          if element == 'Der Teufel in London':
              string += element + '.'
          else:
              string += element
Liebe Grüße,
Katharina

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 14:50
von Hyperion
Strings sind in Python unveränderlich. D.h. Du kannst einen String nicht ändern, sondern nur einen neuen erstellen, der natürlich aus Teilen von bestehenden zusammengesetzt werden kann. Dies erst einmal vorab.

Ich habe ehrlich gesagt noch nicht ganz kapiert, *wie* Deine Daten wirklich aussehen und vor allem *was* Du am Schluss haben möchtest!

Kannst Du das bitte einmal anhand *eines* Strings veranschaulichen?

Du solltest übrigens nicht ``string`` als Bezeichner nutzen; ``string`` ist ein Modul in Python und damit würdest Du den Zugriff darauf überschreiben.

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 14:57
von BlackJack
@kaddi789: Wenn `kapitelliste` eine Liste mit Zeichenketten ist, dann ist `einkapitel` jeweils *ein* Element dieser Liste, also eine Zeichenkette. Und eine Schleife über die Elemente einer Zeichenkette sind die einzelnen Buchstaben. Natürlich ist kein einzelner Buchstabe gleich einer längeren Zeichenkette wie 'Der Teufel in London'. Warum gehst Du die einzelnen Buchstaben durch?

Das Ergebnis scheint mir wenig sinnvoll zu sein weil die ganzen Kapitelnamen ohne Trennzeichen zusammengefügt werden. Wiederholtes ``+=`` in einer Schleife ist bei Zeichenketten sowieso keine so gute Idee weil die unveränderbar sind, also bei jedem Erweitern eine neue Zeichenkette erstellt wird und die beiden Komponenten dort hineinkopiert werden. Man erstellt, kopiert, und verwirft in so einer Schleife immer länger werdende Zeichenketten. Normalerweise sammelt man die Einzelteile in einer Liste und fügt sie dann nach der Schleife mit der `join()`-Methode auf Zeichenketten zusammen.

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 15:03
von kaddi789
@Hyperion:
Dass die unveränderlich sind, weiß ich, deshalb erstelle ich ja einen neuen String..
Meine Daten sind die einzelnen Kapitel des Buchs 'Der Medicus', ich muss darauf aus dem Modul TextBlob 'sentences' anwenden, dafür brauche ich hinter den einzelnen Kapitelüberschriften einen Punkt, damit der das als Satz erkennt.

kapitel1 = "Der Teufel in London\n\n\n\nEs waren Robs letzte, ruhige Augenblicke seliger Unwissenheit,..."
Daraus möchte ich haben:
kapitel1neu = "Der Teufel in London.\n\n\n\nEs waren Robs letzte, ruhige Augenblicke seliger Unwissenheit,..."

@BlackJack: Ja genau, das hatte ich ja auch geschrieben, nur habe ich keine Idee, wie man das sonst machen kann.. mit dem += hat bei mir bisher immer funktioniert, aber dann versuche ich das jetzt mal mit join(), vllt kriege ich das ja hin. Danke!

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 15:19
von Hyperion
Dann musst Du ja den String vor allem erst einmal an der richtigen Stelle *trennen*. Offenbar sind die drei "\n" eine gute Stelle:

Code: Alles auswählen

In [1]: kapitel1 = "Der Teufel in London\n\n\n\nEs waren Robs letzte, ruhige Augenblicke seliger Unwissenheit,..."

In [2]: kapitel1.split("\n\n\n")
Out[2]:
['Der Teufel in London',
 '\nEs waren Robs letzte, ruhige Augenblicke seliger Unwissenheit,...']
Nun kannst Du die Überschrift und den Rumpf wieder zusammenfügen, indem Du ".\n\n\n" dazwischen packst:

Code: Alles auswählen

In [4]: "{}.\n\n\n{}".format(*kapitel1.split("\n\n\n"))
Out[4]: 'Der Teufel in London.\n\n\n\nEs waren Robs letzte, ruhige Augenblicke seliger Unwissenheit,...'
Das ganze ist insofern nicht ganz robust, als dass ich davon ausgehe, dass "\n\n\n" nur einmal vorkommt. Kommt es mehrfach vor, so werden alle weiteren Teile nicht im Endresultat auftauchen. Dies kann man aber verhindern, indem man den Parameter ``maxsplit`` angibt, der bewirkt, dass wirklich nur beim *ersten* Auftreten der Suchstelle splittet:

Code: Alles auswählen

kapitel1.split("\n\n\n", 1)

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 15:41
von kaddi789
@ Hyperion: Ah ok danke! Aber wie kann man das jetzt in eine for-Schleife einbauen, dass das für jedes Kapitel aus der kapitelliste gemacht wird? Das funktioniert bei mir gerade noch nicht.. :cry:

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 15:50
von Hyperion
Du erstellst Dir eine leere Liste als Zielstruktur. Dann iterierst Du über alle Kapitel, führst die gezeigte Erstellung eines jeweils neuen Kapitelstrings durch und fügst diesen dann an die Zielstruktur an. Eigentlich ganz einfach :K

Was genau ist Dir denn unklar?

Re: Wort in einem String suchen und '.' anhängen

Verfasst: Sonntag 22. Februar 2015, 16:01
von kaddi789
Ah, habs hinbekommen, vielen Dank für die Hilfe! :)