2016-06-01 72 views
0

我一直在處理這部分代碼,試圖得到一個possitive,但無法得到一個。一段時間後發現我的函數「if open in open('users.txt'):」並不是要識別字符串的一部分,因爲如果users.txt只包含單詞「博拉」。 我的意思是,如果我在user.txt中寫入「Bola」,它會給我一個錯誤。 我設法瞭解問題,但不知道如何解決它。 使用U.find()嘗試,但它並沒有提前python:if open in open(example.txt)not reading the string

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包含在文件中bola in open(...).read()將返回True字符串一個低調,不一定是一條線。

這仍然有一個問題(您的原始代碼也有),您泄漏了open創建的文件描述符。爲了避免它,你可以做線沿線的:

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

嘿,這實際上工作,謝謝! 我不是如何文件描述符將幫助我,但我可以稍後閱讀。再次感謝 – Bola

+0

這是在文件中查找特定字符串的好方法。 –

0

你找不到你的字符串,因爲開放的工作,要麼...任何解決方案將apreciated ...

感謝( '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,打開('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")