python在TXT中查找字符串,为啥总是不能输出字符串呢。。。求大神

如题所述

你的f1.readlines()返回的是一个列表,比如如果你的222.txt里的内容是:
aaa
bbb
ccc
dd
那么lines得到的结果是:['aaa\n', 'bbb\n', 'ccc\n', 'dd'],这是一个列表,不是字符串。
所以if string in lines得不到正确结果,把lines转换成字符串就行了。
可以直接用str(lines);也可以遍历lines中的元素一一判断;也可以用f1.readline(),一次读取一行,返回的是字符串,不过外部要加个循环,读到文件结束时跳出循环
另外Python自带True和False代表逻辑真和逻辑假,所以你没必要再定义TRUE、FALSE和RETURN_VALUE这三个变量。找到字符串就在print string后面加一句return True,找不到就在except下一句return False即可。追问

赞大神,可以了;还想请教一下,我想增加一个排除条件怎么加;比如:查找failed,但排除okfailed

追答

可以用find函数,比如从字符串data中查找failed,用data.find('failed'),如果data包含failed,则返回failed首次出现在data中的位置,如果找不到,返回-1。
判断data.find('failed')的值,不等于-1时让返回值-2得到failed前面两个字符的首地址,令a=data.find('failed'),b=data[a-2,a],如果data里是okfailed,那么得到的b值就是'ok'。
这是比较简单的判断,不过存在一个问题,就是find函数只能找到首个failed,如果后面还有那就不行了,比如从aaaokfailedbbfailed中找failed,它只会返回第一次找到failed的位置,这里是5,但它不会检查出还有第二个failed。经过判断第一个failed不符合要求,所以抛弃了,但是这个字符串还有第二个字符串,而第二个字符串是符合要求的,但是我们得不到这个符合要求的第二个failed。如果你的需求是找出所有符合要求的failed,排除所有不符合要求的failed,那么上面这个方法就不行了。
幸运的是完整的find函数可以接受三个参数,第一个参数是要查找的字符串,第二个参数是开始位置(即从哪个位置开始查找),第三个参数是结束位置(即找到哪一个位置就停止查找)。所以可以改变find函数的第二个参数来继续查找剩余的failed,当然也可以截取第一个failed后面剩余的字符串构成新的字符串,然后对新字符串继续查找failed。
稍作改变,加个循环即可。以第二种截取字符串的情况为例,循环内容就是找到failed并判断是否符合要求,判断完就向后截取字符串,对得到的新字符串继续查找failed并判断,直到所有failed都找出为止。

温馨提示:答案为网友推荐,仅供参考
相似回答