String.endswith()

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
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Hallo Leute!

Habe gerade ein Problem. Ich möchte einen String aus einer Datei einlesen und ihn darauf testen ob er mit einer Klammer endet; also sowas hier:

var = (0x00)

if var.endswith(")"):
#do something

Anmerkung: Einlesen und so das geht alles also hierzu bitte keine Tipps.

Allerdings bekomme ich hier nie ein true...

Muss ich hier mit ascii Codierung arbeiten und wenn ja wie?

Grüße

Patrick
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau Dir doch mal an, was ``type(var)`` hier liefert ;-)

Übrigens kann der gezeigte Code so nicht funktionieren, sondern sollte einen ``AttributeError`` werfen!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Versuch mal ...

Code: Alles auswählen

var = "(0x00)"

if var.endswith(')'):
    print("%s ends with a ')'" % var)
Atomkraftwerkaktienbesitzer
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Killigen: wenn Du Zeilen aus einer Datei liest, hast Du garantiert noch das Zeile-Ende-Zeichen als letztes Zeichen. Leerraum wegzustripen ist übrigens fast immer eine gute Idee.
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Also hier eine Vereinfachung meines Codes:

Code: Alles auswählen


with open("Hallo.txt") as f:
    for line in f:
        print line
        if line.endswith(')'):
            print "klammer gefunden"
        else:
            print "klammer nicht gefunden"

vielleicht ist es jetzt deutlicher...
@Ene Uran
Hab deinen Vorschlag ausprobiert so wie im Codebeispiel; funktioniert nur leider nicht
@Hyperion
Das ist aber keine wirkliche Lösung für mein Problem :?
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Probier mal:

Code: Alles auswählen

line.rstrip().endswith(')')
Oder falls es noch expliziter sein soll:

Code: Alles auswählen

line.rstrip('\n').endswith(')')
Die zweite Variante löscht nur das Newline-Zeichen am Ende einer Zeile, während die erste Variante jegliche Art von zusammenhängendem Leerraum (also auch Leerzeichen oder Tabs) vom Zeilenende entfernt.

Alternativ zur zweiten Variante geht auch:

Code: Alles auswählen

line[:-1].endswith(')')
Dies löscht immer das letzte Zeichen aus dem String (egal was es ist).

Das sind aber eigentlich Dinge, die man nach dem Lesen eines Grundlagen-Tutorials schon von selbst wissen müsste...
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Danke snafu line.rstrip().endswith(')') hat funktioniert! :) was macht das rstrip?
BlackJack

@Killigen: Das macht das was in der Dokumentation zu der Methode steht…
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Killigen hat geschrieben: @Hyperion
Das ist aber keine wirkliche Lösung für mein Problem :?
Ich kann doch nichts dafür, dass Du uns hier *fehlerhaften* und sachlich *falschen* Code zur Beschreibung postest :!: :roll:

Meine Kristallkugel hat da eben nicht so gut funktioniert wie die der anderen... :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Killigen hat geschrieben:was macht das rstrip?
Habe ich in dem Beitrag doch geschrieben.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Hyperion: lieber eine kaputte Kristallkugel als konsequent ignoriert zu werden :cry:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sirius3 hat geschrieben:@Hyperion: lieber eine kaputte Kristallkugel als konsequent ignoriert zu werden :cry:
*tröst* :)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Killigen
User
Beiträge: 48
Registriert: Freitag 6. März 2015, 10:46

Naja danke für die Hilfe!
Der Code von snafu hat jedenfalls funktioniert!
Antworten