pythonstring-search

Looking for a string in text file with python


I'm trying to look for a string in text file. Technically, my code supposed to work, I was define a key to search, which is the string I'm looking for and I checked the whole file line after line.

When I'm running the code, somehow the code always go to except case although the results suppose to be "True"

This is my code:

def check_if_image_at_end_selected():
    with open('Sanity_CS.txt', 'r') as checked_script:

        key = "MillSet_BBs.set_image_at_end('yes')"

        for num, line in enumerate(checked_script, 1):
            if key in line:
                print("OK")
                return 1
            else:
                print("no")
                return 0


Solution

  • I can not see why you use enumerate() in your example. The resulting num variable is never used. So I assume the line number is not of interested right?

    Because of that I removed that part from the code. I replaced the open() with a io.StringIO just for that example code because we don't have a real file here.

    #!/usr/bin/env python3
    import io
    
    simulated_file_content = "lineA\nMillSet_BBs.set_image_at_end('yes')\nline3"
    
    def check_if_image_at_end_selected():
        # io.StringIO just for simulating a file
        with io.StringIO(simulated_file_content) as checked_script:
            key = "MillSet_BBs.set_image_at_end('yes')"
    
            # read whole file at once
            file_content = checked_script.read()
    
            if key in file_content:
                print("OK")
                return True
            else:
                print("no")
                return False
    
    result = check_if_image_at_end_selected()
    print(result)
    

    The code just read the whole file at once as one string and then does a simple string search. Nothing more.

    You don't have to close() the file object your self. This is done automatically (by the ContextManager) when you use the with block.

    If you don't want to read the whole file at once because it is a very big file you can do a line by line read-and-search like this:

    #!/usr/bin/env python3
    import io
    
    simulated_file_content = "lineA\nMillSet_BBs.set_image_at_end('yes')\nline3"
    
    def check_if_image_at_end_selected():
        # io.StringIO just for simulating a file
        with io.StringIO(simulated_file_content) as checked_script:
            key = "MillSet_BBs.set_image_at_end('yes')"
    
            # read line by line
            for line in checked_script.readline():
                if key == line:
                    print("OK")
                    return True
    
        print("no")
        return False
    
    result = check_if_image_at_end_selected()
    print(result)