2016-04-14 46 views
-1

我有兩個文本文件如何在python中比較字符串中是否存在condtion?

1)foo.txt的

2)write.txt

foo.txt的包含

welcome 

和write.txt是空白的文本文件。

fo = open("foo.txt", "r+") 
str = fo.readlines(); 
fo1 = open("write.txt", "wb") 
print str[0] 


if (str[0] == "welcome"): fo1.write("hoola"); 

fo.close() 

fo1.close() 

上面的代碼是python代碼。 當我運行它時,沒有錯誤。

輸出是運行該程序後

welcome 

文本文件:foo.txt的

welcome 

1))write.txt是完全空白

所以測試「hoola」沒有寫在文件上write.txt

有了輸出,我確保str [0]是'welcome',但文本不會寫入第二個文本文件 如何更正此代碼以比較str []的第一個元素與字符串'歡迎'

+0

你肯定沒有'在*歡迎*字符串的結尾newline'字符?您爲我寫的代碼適用於我 – Francesco

+0

爲什麼打開文件以[二進制模式]寫入(https://docs.python.org/3/library/functions.html#open)? 剛剛閱讀的第一個文件...嘗試'r'和'w'代替 – Enkelli

+0

是的它的工作,這是一個缺失的換行字符,非常感謝 – Basil

回答

1

問題是,open('foo.txt').readlines()會給你的名單['welcome\n'],你錯過了你的支票換行符。因此,要麼檢查字符串'welcome\n',要麼使用str.strip方法刪除任何換行符(和空白)的行。

另外,不要使用變量名稱str,您將掩蓋內置的str類型。

+0

這是不正確的。我的open('foo.txt')的輸出。readlines()''''''歡迎']'沒有'\ n' – Francesco

+0

@Francesco顯然我猜對了,OP的文件以換行符結束,或者OP不會接受這個答案。 – timgeb

+0

從你寫的東西看來'readlines()'增加了一個新行。我建議你編輯你的答案,因爲它是誤導性的 – Francesco

0

這裏有一些事情可以做:

- 如果有任何尾隨空白它可以搞砸的字符串匹配,可以與被刪除:

import string 
clean_input = string.rstrip(str[0]) 
if clean_input == 'welcome': ... 

- 也可以使用常規表達式來模式匹配,如果你只關心首字符匹配。我個人的經驗是,這是一個更可靠的方式做文本分析:

import re 
if re.match('welcome', str[0]): ...