How do I read a file as the default user input?

Viewed 202

How do I read a whole file in python 3.6.x using the user input() function? Like the algorithms challenge sites do. For example:

  • I have a file with the following content:

    line 1
    line 2
    line 3
    end
    
  • My program would do something like:

    x = input()
    while x != 'end':
        print("I am at", x)
        x = input()
    
  • Then I would have as output:

    I am at line 1
    I am at line 2
    I am at line 3
    

I guess I need to wrap my python sample progam with another program (possible also python, or OS script) that call the first one passing the file as user input. But how could I do it?

2 Answers

Usually such challenges will pipe the input via stdin, and expected the response via stdout.

To do that, run your command from a command line like so;

python program.py < input.txt

If you want to save the output of the script into a file, you can redirect it to one.

python program.py < input.txt > output.txt

The usual standard lib tool for this job is the fileinput module:

import fileinput

for line in fileinput.input():
    print(f'working with line {line}')

Then from the shell, take your pick of the following (they all work):

$ python3 my_script.py my_file.txt
$ python3 my_script.py < my_file.txt
$ cat my_file.txt | python3 my_script.py
Related