Strings???

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
luki19
User
Beiträge: 7
Registriert: Montag 1. November 2010, 10:34

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?
origin
User
Beiträge: 4
Registriert: Montag 1. November 2010, 09:49

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 :)
luki19
User
Beiträge: 7
Registriert: Montag 1. November 2010, 10:34

Vielen dank dann werde ich mal suchen:)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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
the more they change the more they stay the same
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
origin
User
Beiträge: 4
Registriert: Montag 1. November 2010, 09:49

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 ...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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
luki19
User
Beiträge: 7
Registriert: Montag 1. November 2010, 10:34

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:)
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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"]
luki19
User
Beiträge: 7
Registriert: Montag 1. November 2010, 10:34

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
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Probiere mal t.split(). Finde heraus, was split macht, wenn es explizit keine Parameter übergeben bekommt.
luki19
User
Beiträge: 7
Registriert: Montag 1. November 2010, 10:34

Vielen vielen dank:)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Bitteschön :)
luki19
User
Beiträge: 7
Registriert: Montag 1. November 2010, 10:34

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?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Zuletzt geändert von Xynon1 am Montag 1. November 2010, 16:11, insgesamt 1-mal geändert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Antworten