2016-06-01 7 views
0

Ich habe mit diesem Teil des Codes beschäftigt, versucht, ein possitive zu bekommen, aber nicht in der Lage, eins zu bekommen. Nach einiger Zeit entdeckte ich, dass meine Funktion "wenn bola in open ('users.txt'):" nicht versucht, einen Teil des Strings zu identifizieren, da er mir nur dann ein Possitiv gibt, wenn users.txt nur das Wort " Bola ". Ich meine, wenn ich "Bola" in user.txt schreibe, wird es mir eine falsche geben. Ich habe das Problem verstanden, weiß aber nicht, wie ich es beheben kann. mit U.find Versuchte(), aber es hat nicht funktioniert entweder ... jede Lösung apreciated ...Python: Wenn String in open (example.txt) die Zeichenfolge nicht lesen

Dank im Voraus

U=open('users.txt','a+') 
    bola = "Bola" 
    if bola in open('users.txt'): 
     U.close() 
     print("usercid found") 
    else: 
     U.write("[" + str(cid) + "]"+str(m.from_user.first_name)+"\n") 
     U.close() 
     print("no usercid gaaaaa") 
+0

Kurz: Um dies zu vermeiden, können Sie etwas entlang der Linien von tun Sie eigentlich nie die Datei lesen. Tun Sie das zuerst, wie auch immer Sie wollen. – TigerhawkT3

Antwort

3

open('users.txt') gibt einen Generator, der Zeilen der Datei aufzählt, nicht eine Zeichenfolge, die den Dateiinhalt enthält, und aus diesem Grund if bola in open('users.txt') kehrt True, wenn und nur wenn in der generierten Sequenz ein Element vorhanden ist, das mit bola übereinstimmt.

Für Ihre Verwendung Fall, dass Sie Folgendes tun:

if bola in open('users.txt').read(): 
    U.close() 
    print("usercid found") 

open(...).read() kehren Sie eine Zeichenfolge, die die gesamte Datei darstellt und als solche wird bola in open(...).read()True zurück, wenn bola in der Datei enthalten ist als ein Substitut, nicht unbedingt als eine Linie für sich.

Dies hat immer noch ein Problem (dass Ihr ursprünglicher Code auch hat), dass Sie einen Dateideskriptor, der open erstellt, leckt.

with open('users.txt') as fr: 
    if bola in fr.read(): 
     U.close() 
     print("usercid found") 
    else: 
     ... 
+0

Hey, das hat wirklich funktioniert, danke! Ich bin nicht, wie der Dateideskriptor mir helfen wird, aber ich kann später darüber lesen. Nochmals vielen Dank – Bola

+0

Dies ist die gute Möglichkeit, eine bestimmte Zeichenfolge in einer Datei zu finden. –

0

Sie können nicht die Zeichenfolge, weil offen finden werden ('users.txt') gibt eine Liste von Strings zurück, jede mit einer neuen Zeile. Einfachste Lösung ist für bola = "Bola\n"

zu suchen Oder:

for line in open('file.txt'): 
    if bola == line.rstrip(): 
     print("usercid found") 
     break 
+0

Sie meinen, es gibt jede Zeile wie string1 string2 string3 ??? gibt es eine Möglichkeit, die Zeichenfolge zu finden, die ich brauche zwischen der Linie? – Bola

+0

@ DiegoErósteguiNavia, öffnen ('file.txt') wird Zeilen wie "bola \ n" zurückgeben, aber Sie vergleichen mit "bola". Entweder entfernen Sie den Zeilenumbruch aus jeder Zeile oder fügen Ihrer Suchanfrage \ '\ n \' hinzu. – kaspersky

0
U=open('users.txt','a+') 
bola = "Bola" 
for line in open('users.txt'): 
    if line.find(bola) >= 0: 
     U.close() 
     print("usercid found") 
    else: 
     U.write("[" + str(cid) + "]"+str(m.from_user.first_name)+"\n") 
     U.close() 
     print("no usercid gaaaaa") 
Verwandte Themen