July 24, 2015

Python cat program

You can implement the Linux cat program with few lines of Python code.

import fileinput
for line in fileinput.input():
    print(line, end='')

Then I was tinkering with this, and wanted to add an option to display the filename if multiple files were given. Here is how I use argparse module for this. Not the most efficient code and prob overkill, but it works!

import fileinput, argparse
parser = argparse.ArgumentParser()
parser.add_argument('files', nargs='+', metavar='FILE', help='files to concatenate or print')
parser.add_argument('-n', action='store_true', help='show filename')
args = parser.parse_args()
with fileinput.input(files=args.files) as finput:
    for line in finput:
        if (args.n and finput.isfirstline()):
            print('\n=== {0} ==='.format(finput.filename()))
        print(line, end='')

Note that argparse not only just parse for options, but actual argument list as well, and you have to explicitly define it, so you may reference it after the parse.