Seite 1 von 1

Strings???

Verfasst: Montag 1. November 2010, 10:44
von luki19
Hallo ich bin ein ziemlicher Neuling was das String bearbeiten mit phyton betrifft. Also ich habe folgendes Problem ich will ganz gerne bei einem String bestimmte Zeilen wegkürzen, welche mit einen bestimmten zeichen anfanen z.B. einer 1 oder Spiegelstrich. Dann will ich noch alle wörter in einzelne Variabeln schreiben also immer nach ner leerzeile. Ich hab schon Tutorials zu strings gesucht aber kein gutes gefunden oder es nicht richtig verstanden. Tut mir leid:( Kann mir jemand helfen oder ein gutes Tutorial schicken?

Re: Strings???

Verfasst: Montag 1. November 2010, 10:52
von origin
1.: Such mal nach ner Split Funktion ... splitten könntest du dann beim Zeilenumbruch \n
2.: Dann solltest du einfach nach pattern suchen damit kannst du die entsprechenden Zeilen erkennen ...
3.: Die Zeilen die nicht dem Pattern entsprechen joinst du danach einfach alle zusammen

das gallileo openbook hilft dir da sehr gut :)

Re: Strings???

Verfasst: Montag 1. November 2010, 10:54
von luki19
Vielen dank dann werde ich mal suchen:)

Re: Strings???

Verfasst: Montag 1. November 2010, 10:55
von Hyperion
origin hat geschrieben: das gallileo openbook hilft dir da sehr gut :)
*schauder* Naja, dabei mag das sogar sein; insgesamt ist es nicht zu empfehlen! Dazu gibts hier einiges Material...

@OP: Evtl bieten sich da auch regexps an. Schau Dazu doch mal in re-Modul.

Hast Du mal hier im Forum nach Tutorial gesucht? Wir verweisen da mindestens alle zwei Tage auf die gleichen Bücher / Seiten und Themen ;-)

Re: Strings???

Verfasst: Montag 1. November 2010, 10:56
von Dav1d
origin hat geschrieben:das gallileo openbook hilft dir da sehr gut :)
Lieber nicht im OpenBook suchen, http://bj.spline.de/python_openbook.html, sondern in der offiziellen Dokumentation

Re: Strings???

Verfasst: Montag 1. November 2010, 11:30
von numerix
Hyperion hat geschrieben:@OP: Evtl bieten sich da auch regexps an. Schau Dazu doch mal in re-Modul.
Wer mit Zeichenketten noch Anfangsschwierigkeiten hat, sollte es vielleicht aber doch zunächst mal ohne RE versuchen.
Evtl. kannst du damit was anfangen:

Code: Alles auswählen

>>> s = """-Hier steht was
... Hier steht auch was
... - noch was anderes
... letzte Zeile"""
>>> print("\n".join(t for t in s.splitlines() if not t.startswith("-")))
Hier steht auch was
letzte Zeile
Oder auch - je nach Bedarf:

Code: Alles auswählen

>>> print("\n".join(t for t in s.splitlines() if not t[0] in "-1x"))
Hier steht auch was
letzte Zeile

Re: Strings???

Verfasst: Montag 1. November 2010, 11:45
von Hyperion
numerix hat geschrieben:
Hyperion hat geschrieben:@OP: Evtl bieten sich da auch regexps an. Schau Dazu doch mal in re-Modul.
Wer mit Zeichenketten noch Anfangsschwierigkeiten hat, sollte es vielleicht aber doch zunächst mal ohne RE versuchen.
Ok, mag sein; allerdings kennen wir die wirkliche Aufgabe ja nicht und da sollte man zumindest nicht verschweigen, dass es nur mit String-Methoden eben oftmals kompliziert und schwer sein kann.

Nebenbei kann ich dann nur zurückfragen, ob man einen Anfänger wirklich mit Generator-Ausdrücken bombardieren sollte :P

Re: Strings???

Verfasst: Montag 1. November 2010, 12:01
von origin
ich bin auch seid vier wochen Anfänger und finde das dass re modul nun nicht sonderlich schwer verständlich ist ... kann aber auch daran liegen dass ich eher aus der Java und Perl ecke komme ...

Re: Strings???

Verfasst: Montag 1. November 2010, 12:06
von numerix
Hyperion hat geschrieben:Nebenbei kann ich dann nur zurückfragen, ob man einen Anfänger wirklich mit Generator-Ausdrücken bombardieren sollte :P
Soll er die Klammern halt eckig machen ... :D

Re: Strings???

Verfasst: Montag 1. November 2010, 14:57
von luki19
Vielen dank Numerix, du hast mir schonmal sehr geholfen, jetzt hab ich noch folgendes Problem. Wenn ich nun meinetwegen nen string hab und dort folgendes drin steht:

Hallo dies ist ein string
Und hier steht etwas drin?

Kann ich es dann irgendwie hinbekommen das er jedes wort in variabeln schreibt also so:

a=Hallo
b=dies
c=ist

Oder es in eine Liste schreibt würde mir auch reichen Vielen dank schonmal im vorraus:)

Re: Strings???

Verfasst: Montag 1. November 2010, 15:06
von /me
luki19 hat geschrieben:Hallo dies ist ein string
Und hier steht etwas drin?

Kann ich es dann irgendwie hinbekommen das er jedes wort in variabeln schreibt also so:

a=Hallo
b=dies
c=ist
Die Daten an individuelle Namen zu binden ist Humbug, aber du hast ja bereits selbst erkannt, dass eine Liste dafür auch geeignet wäre. Dafür hat Python bereits etwas eingebaut. Schau mal in der Dokumentation unter http://docs.python.org/library/stdtypes.html#str.split.

Re: Strings???

Verfasst: Montag 1. November 2010, 15:07
von numerix
luki19 hat geschrieben:Kann ich es dann irgendwie hinbekommen das er jedes wort in variabeln schreibt also so:
a=Hallo
b=dies
c=ist
Das willst du nicht wirklich.
luki19 hat geschrieben:Oder es in eine Liste schreibt würde
Das schon eher. Steckt in meinem Beispiel quasi drin. Mach die Klammern eckig und lass das join() weg:

Code: Alles auswählen

zeilen = [t for t in s.splitlines() if not t[0] in "-1x"]

Re: Strings???

Verfasst: Montag 1. November 2010, 15:29
von luki19
Naja nun ist es so wenn ich das ausführe Packt er eine Zeile in einen Punkt der Liste, ich will aber die einzelnen Wörter :K

Re: Strings???

Verfasst: Montag 1. November 2010, 15:33
von derdon
Probiere mal t.split(). Finde heraus, was split macht, wenn es explizit keine Parameter übergeben bekommt.

Re: Strings???

Verfasst: Montag 1. November 2010, 15:37
von luki19
Vielen vielen dank:)

Re: Strings???

Verfasst: Montag 1. November 2010, 15:38
von derdon
Bitteschön :)

Re: Strings???

Verfasst: Montag 1. November 2010, 16:02
von luki19
Habe doch noch ein Problem gefunden das ganze Sieht so aus...

Code: Alles auswählen

    pfad = "c:/"
    dateiname="test.txt"
    datei = pfad+dateiname
    in_file = open(datei,"r")
    text = in_file.read()
    in_file.close()
    text=("\n".join(t for t in text.splitlines() if not t.startswith("-")))
    zeilen = [t for t in text.split() if not t[0] in "-1x"]
    test=zeilen[1]
    print(test)
in der datei steht:

-blaa
-blub
1
2
3

ausgabe ist 3 warum?

Re: Strings???

Verfasst: Montag 1. November 2010, 16:09
von Xynon1
was willst du bei text in

Code: Alles auswählen

zeilen = [t for t in text.split() if not t[0] in "-1x"]
splitten ?

Lass es weg und es geht, obwohl man die Form des ganzen etwas besser gestalten könnte.

Re: Strings???

Verfasst: Montag 1. November 2010, 16:10
von Hyperion
luki19 hat geschrieben: in der datei steht:

-blaa
-blub
1
2
3

ausgabe ist 3 warum?
Weil Zeilen mit "-" oder "1" doch rausgefiltert werden (sollten). Also ist in der Liste das 2. Element (über den Index 1 zu erreichen) eben die "3". Das erste Element ( Index = 0) ist dann eben die "2".

Du solltest wirklich mal ein Tutorial durcharbeiten; das sind doch einfache Basics.

zum Code:
- Pfade setzt man nicht mit "+" zusammen, dafür gibt es die Funktion join() aus dem os.path-Modul.
- Dateien öffnet man mit diesem Konstrukt:

Code: Alles auswählen

with open(filename, "r") as infile:
    text = infile.read()
# die Datei wird automatisch geschlossen

Re: Strings???

Verfasst: Montag 1. November 2010, 16:24
von numerix
luki19 hat geschrieben:Habe doch noch ein Problem gefunden das ganze Sieht so aus...
Das eigentliche Problem ist, dass du ohne wirklich zu verstehen, was du tust, mittels trial & error herumbastelst und damit mehr oder weniger deinem Ziel näher kommst. Wie dir schon geraten wurde, solltest du dir Zeit für die Lektüre eines Tutorials nehmen. Dann kannst du dein Problem in ein paar Stunden (oder auch Tagen) allein lösen. Vermutlich sieht es dann nicht so aus, wie diese Zeile,

Code: Alles auswählen

words = " ".join(t for t in text.splitlines() if not t[0] in "-1x").split()
die dein Problem löst, sondern enthält explizite Schleifen und ein append() etc.
Das macht aber nichts und du hättest das gute Gefühl dabei, es selbst hinbekommen zu haben, statt nur irgendwelche Schnipsel unverstanden neu zusammenzusetzen.