2016-06-01 2 views
0

Я занимался этой частью кода, пытаясь получить способный, но не имея возможности получить его. Через некоторое время выяснилось, что моя функция «если bola in open (« users.txt »):« не пытается идентифицировать одну часть строки, так как это даст мне только возможность, если user.txt содержит только слово « Bola». Я имею в виду, если я напишу «Бола» внутри user.txt, это даст мне ложь. Мне удалось понять проблему, но не знаю, как ее исправить. Пробовал с помощью U.find(), но это не сработало ... любое решение будет apreciated ...python: if string in open (example.txt), не читающий строку

заранее спасибо

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

Вкратце: вы никогда не прочитать файл. Сделайте это первым, каким бы вы ни хотели. – TigerhawkT3

ответ

3

open('users.txt') возвращает генератор, который перечисляет строки файла, а не строка, содержащая содержимое файла, а также из-за того, что if bola in open('users.txt') вернется True, если и только если в сгенерированной последовательности есть элемент, который соответствует bola.

Для вашего случая использования вы хотите сделать следующее:

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

open(...).read() вернет вам строку, которая представляет весь файл, и как таковой, bola in open(...).read() будет возвращать True если bola содержится в файле, как подстановка, не обязательно как линия сама по себе.

У этой проблемы все еще есть проблема (у вашего исходного кода также есть), что вы протекаете файловый дескриптор, созданный open. Чтобы избежать этого, вы можете сделать что-то вдоль линий:

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

Эй, это действительно сработало, спасибо! Я не так, как файловый дескриптор поможет мне, но я могу прочитать об этом позже. Еще раз спасибо – Bola

+0

Это хороший подход к поиску конкретной строки в файле. –

0

Вы не можете найти вашу строку, потому что открытая ('users.txt') возвращает список строк, каждый из которых имеет новую строку. Самым простым решением является поиск bola = "Bola\n"

Или:

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

Вы имеете в виду, что он возвращает каждую строку, как string1 string2 string3 ??? Есть ли способ найти строку, которая мне нужна между линией? – Bola

+0

@ DiegoErósteguiNavia, open ('file.txt'), вернет строки типа «bola \ n», но вы сравните с «bola». Таким образом, вы либо удаляете новую строку из каждой строки, либо добавляете «\ n» к вашему поисковому запросу. – 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")