Frage von lenlux, 60

Python String auf Inhalt prüfen?

Hallo liebe Community, ich bin gerade dabei, für einen in Python programmierten Bot eine Rechteverwaltung zu basteln. Jedenfalls bekomme ich, wenn ich den Inhalt der Datei, wo die Admins eingespeichert sind, eine Liste. Deshalb gehe ich mit dieser Liste einfach wie mit einem String um und mache 

if "test" in adminlist.readlines(): 

print("Klappt") 

else: print("Klappt nicht!") 

Dummerweise gibt er als Output immer Klapp nicht! :/ Für Hilfe bin ich sehr dankbar. LG, lenlux. :D

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ezares, 47

http://stackoverflow.com/questions/3437059/does-python-have-a-string-contains-su...

Das hier könnte dir helfen

Kommentar von lenlux ,

str.__contains:: funktioniert. Danke. :D

Kommentar von Ezares ,

Du hast bei python so genannte "Magic methods" z.b. "__add__", "__contains__".

Die helfen dir z.B. wenn du eine eigene Klasse von Objekten baust.

Als Beispiel: Du baust dir Vektoren und willst die addieren, dann könnte man sich eine Funktion addieren(Vektor1, Vektor2) bauen oder "__add__" dann bekommt man das Ergebnis von "__add__" wenn man "Vektor1 + Vektor2" schreibt.

Das gleiche ist hier mit "__contains__" es reicht das Schlüsselwort "in" zu benutzen. Für dein Beispiel also:

input = adminlist.readlines()
if "test" in input:
    print("Klappt")
else:
    print("Klappt nicht")

(sollte hoffentlich klappen)

Kannst z.B. bei http://www.rafekettler.com/magicmethods.html nachlesen

Antwort
von xXFreddy, 25

Hiho,

Nochmal als anhang :D :

Also eigentlich sollte das so klappen solange bei test Groß- und Klein-schreibung beachtet ist. Das würde so z.B. auch nicht funktionieren wenn der Inhalt den du suchst nur test beinhaltet und nicht nur test ist also z.B steht in readlines() -> ["testuser", "admin",...] anstatt test dann klappt der einfache aufbau mit if "test" in ...readlines() nicht da bräuchtest du eine schleife ODER halt __contains.
Es kann auch sein das der Inhalt deines Files irgendwelche Escape Sequences beinhaltet (also \n \r \t usw. gehe ich jetzt aber mal nicht von aus)

Wenn kannste dir ja die Strings einfach mal mit repr("mystring") ausgeben lassen.

MfG 

Freddy

Keine passende Antwort gefunden?

Fragen Sie die Community