如何在文本文件中搜索字符串?

新手上路,请多包涵

我想检查一个字符串是否在文本文件中。如果是,则执行 X。如果不是,则执行 Y。但是,出于某种原因,此代码始终返回 True 。谁能看出哪里出了问题?

 def check():
    datafile = file('example.txt')
    found = False
    for line in datafile:
        if blabla in line:
            found = True
            break

check()
if True:
    print "true"
else:
    print "false"

原文由 HankSmackHood 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 194
2 个回答

你总是得到 True 的原因已经给出了,所以我再提供一个建议:

如果您的文件不是太大,您可以将其读入一个字符串,然后使用它(比逐行读取和检查行更容易且通常更快):

 with open('example.txt') as f:
    if 'blabla' in f.read():
        print("true")

另一个技巧:您可以通过使用 mmap.mmap() 创建一个使用底层文件的“类字符串”对象(而不是读取内存中的整个文件)来缓解可能的内存问题:

 import mmap

with open('example.txt') as f:
    s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
    if s.find('blabla') != -1:
        print('true')

注意:在 python 3 中,mmap 的行为类似于 bytearray 对象而不是字符串,因此您使用 find() 查找的子序列必须是 bytes 对象而不是 a457-c2字符串,例如。 s.find(b'blabla') :

 #!/usr/bin/env python3
import mmap

with open('example.txt', 'rb', 0) as file, \
     mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
    if s.find(b'blabla') != -1:
        print('true')

您还可以在 mmap 例如,不区分大小写的搜索: if re.search(br'(?i)blabla', s):

原文由 Steven 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如杰弗里所说,您没有检查 check() 的值。此外,您的 check() 函数未返回任何内容。注意区别:

 def check():
    with open('example.txt') as f:
        datafile = f.readlines()
    found = False  # This isn't really necessary
    for line in datafile:
        if blabla in line:
            # found = True # Not necessary
            return True
    return False  # Because you finished the search without finding

然后你可以测试 check() 的输出:

 if check():
    print('True')
else:
    print('False')

原文由 amccormack 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏