Python : read text file character by character in loop

python, python-3.x

Solution

I'd approach this differently, and make a function that takes in a filename that returns a generator:

def reader(filename):
    with open(filename) as f:
        while True:
            # read next character
            char = f.read(1)
            # if not EOF, then at least 1 character was read, and 
            # this is not empty
            if char:
                yield char
            else:
                return

Then you need to give the filename only once

r = reader('filename')

And the file is kept opened for much faster operation. To fetch next character, use the `next` built-in function

print(next(r))  # 0
print(next(r))  # 1
...

You can also use `itertools`, such as `islice` on this object slice characters, or use that in a `for` loop:

# skip characters until newline
for c in r:
    if r == '\n':
        break

Problem

For example, there's a text file which contains numbers from 0 to 9: 0123456789 Using the following function, I'd like to get output like this: ``` >>> print_char('filename') 0 >>> print_char('filename') 1 >>> print_char('filename') 2 . . . >>> print_char('filename') 9 ``` That means, every time I call the function it returns the next number. Here's my function: ``` def print_char(filename): f = open(filename, 'r') while True: char=f.read(1) if not char: break print(char) ``` ...and the output I've got: ``` >>> print_char('filename') 0 1 2 3 . . . 9 ``` So, how to create the function which will return character by character on every call?

Original source