📃

Pythonのargparseで標準入出力を使いたい

2021/12/26に公開

やりたいこと

argparseを使う際に標準入出力を使いたい。よくよく見たらargparseのページに方法が載ってました。

https://docs.python.org/ja/3/library/argparse.html


ソースコード

Example としては -i で入力したtsvを -o で出力します。

input.tsvは以下としました。

	c1	c2
r1	7	6
r2	8	9
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import pandas as pd


def parser_setting():
    parser = argparse.ArgumentParser(prog='example_argparse.py',
                                     description='description')
    parser.add_argument('-i', '--path_in_tsv',
                        action='store',
                        type=argparse.FileType('r'),
                        default='-',
                        help='File path of input tsv')
    parser.add_argument('-o', '--path_out_tsv',
                        action='store',
                        type=argparse.FileType('w'),
                        default='-',
                        help='File path of output tsv')
    args = parser.parse_args()
    return vars(args)


def main(args):
    # preprocess - read configs
    path_in_tsv = args['path_in_tsv']
    path_out_tsv = args['path_out_tsv']

    # main - input
    df = pd.read_csv(path_in_tsv, sep='\t', index_col=0)

    # main - output
    df.to_csv(path_out_tsv, sep='\t')


if __name__ == '__main__':
    main(parser_setting())

Tips

位置引数の場合は nargs='?' または nargs='*' とデフォルト値を指定することで同様にすることができます。

parser.add_argument('path_in_tsv',
		    action='store',
		    nargs='?',
		    type=argparse.FileType('r'),
		    default='-',
		    help='File path of input tsv')

Discussion