Strings???
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?
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
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

- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
*schauder* Naja, dabei mag das sogar sein; insgesamt ist es nicht zu empfehlen! Dazu gibts hier einiges Material...origin hat geschrieben: das gallileo openbook hilft dir da sehr gut
@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
assert encoding_kapiert
Lieber nicht im OpenBook suchen, http://bj.spline.de/python_openbook.html, sondern in der offiziellen Dokumentationorigin hat geschrieben:das gallileo openbook hilft dir da sehr gut
the more they change the more they stay the same
Wer mit Zeichenketten noch Anfangsschwierigkeiten hat, sollte es vielleicht aber doch zunächst mal ohne RE versuchen.Hyperion hat geschrieben:@OP: Evtl bieten sich da auch regexps an. Schau Dazu doch mal in re-Modul.
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
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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.numerix hat geschrieben:Wer mit Zeichenketten noch Anfangsschwierigkeiten hat, sollte es vielleicht aber doch zunächst mal ohne RE versuchen.Hyperion hat geschrieben:@OP: Evtl bieten sich da auch regexps an. Schau Dazu doch mal in re-Modul.
Nebenbei kann ich dann nur zurückfragen, ob man einen Anfänger wirklich mit Generator-Ausdrücken bombardieren sollte

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
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:)
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:)
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.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
Das willst du nicht wirklich.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 schon eher. Steckt in meinem Beispiel quasi drin. Mach die Klammern eckig und lass das join() weg:luki19 hat geschrieben:Oder es in eine Liste schreibt würde
Code: Alles auswählen
zeilen = [t for t in s.splitlines() if not t[0] in "-1x"]
Habe doch noch ein Problem gefunden das ganze Sieht so aus...
in der datei steht:
-blaa
-blub
1
2
3
ausgabe ist 3 warum?
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)
-blaa
-blub
1
2
3
ausgabe ist 3 warum?
was willst du bei text in splitten ?
Lass es weg und es geht, obwohl man die Form des ganzen etwas besser gestalten könnte.
Code: Alles auswählen
zeilen = [t for t in text.split() if not t[0] in "-1x"]
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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".luki19 hat geschrieben: in der datei steht:
-blaa
-blub
1
2
3
ausgabe ist 3 warum?
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
assert encoding_kapiert
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,luki19 hat geschrieben:Habe doch noch ein Problem gefunden das ganze Sieht so aus...
Code: Alles auswählen
words = " ".join(t for t in text.splitlines() if not t[0] in "-1x").split()
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.