How to search for a string in text files?

后端 未结 12 2273
死守一世寂寞
死守一世寂寞 2020-11-22 04:29

I want to check if a string is in a text file. If it is, do X. If it\'s not, do Y. However, this code always returns True for some reason. Can anyone see what i

12条回答
  •  旧巷少年郎
    2020-11-22 05:16

    The reason why you always got True has already been given, so I'll just offer another suggestion:

    If your file is not too large, you can read it into a string, and just use that (easier and often faster than reading and checking line per line):

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

    Another trick: you can alleviate the possible memory problems by using mmap.mmap() to create a "string-like" object that uses the underlying file (instead of reading the whole file in memory):

    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')
    

    NOTE: in python 3, mmaps behave like bytearray objects rather than strings, so the subsequence you look for with find() has to be a bytes object rather than a string as well, eg. 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')
    

    You could also use regular expressions on mmap e.g., case-insensitive search: if re.search(br'(?i)blabla', s):

提交回复
热议问题