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

发布于 2021-02-02 23:19:26

我想检查字符串是否在文本文件中。如果是,请执行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"
关注者
0
被浏览
138
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你一直得到的原因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对象而不是字符串。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)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看