2016-04-14 61 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]): ...