この記事の対象
argparseの存在を知っているけど使ったことがない人。
python初心者の方
最近改めてまた勉強したので、まとめます。
argparseとは
argparseを使うと、pythonの実行の時にコマンドラインから引数を渡すことができるようになります。
# sample.pyの関数にファイル名を渡すとその名前でファイルを作っているようなイメージ
python sample.py --name sample.csv
みたいな感じで渡せます。
やろうと思えば
arg = input('filename->')
sample(arg)
# 実行結果
# filename -> # ここにファイル名(sample.csv)を入れる
という感じでinputでもできますが、より充実した機能をargparseは提供してくれます。
使い方
今回は
・ディレクトリと期間(月)とファイル形式を渡すと該当のファイル名を列挙するようなプログラムを想定
・引数はディレクトリ(dir)、月(month)、ファイル形式(format)
・オプション引数として列挙する個数(l)を指定
例を先に出します。
import argparse
# パーサーの設定
parser = argparse.ArgumentParser(
description='指定されたディレクトリから特定の月のファイルを検索するプログラム',
formatter_class=argparse.RawDescriptionHelpFormatter,
epilog='''
使用例:
%(prog)s dir /path/to/directory month 3 format txt
%(prog)s dir /path/to/directory month 3 format csv --l 5
''')
# 引数の指定
parser.add_argument('dir', help="対象ディレクトリ")
parser.add_argument('month', help="データ取り込み対象月")
parser.add_argument('format', help="ファイルフォーマット")
parser.add_argument('--l', type=int, help="表示する列数")
args = parser.parse_args()
順番に内容を見ていきます。
パーサーの設定
parser = argparse.ArgumentParser(
description='指定されたディレクトリから特定の月のファイルを検索するプログラム',
formatter_class=argparse.RawDescriptionHelpFormatter)
epilog='''
使用例:
%(prog)s dir /path/to/directory month 3 format txt
%(prog)s dir /path/to/directory month 3 format csv --l 5
''')
引数について
description
プログラムの説明を記載します。あってもなくてもいいです。
formatter_class
ヘルプのフォーマットをカスタマイズできるようになります。
RawDescriptionHelpFormatterを定義するとdescriptionとepilogはすでに整形済みのものとして改行されないようになります。
epilog
プログラムの説明の追加を記載できます。
例えば上の例だと
usage: test.py [-h] [--l L] dir month format
指定されたディレクトリから特定の月のファイルを検索するプログラム
positional arguments:
dir 対象ディレクトリ
month データ取り込み対象月
format ファイルフォーマット
options:
-h, --help show this help message and exit
--l L 表示する列数
使用例:
test.py dir /path/to/directory month 3 format txt
test.py dir /path/to/directory month 3 format csv --l 5
という感じでヘルプを見られるんですが、使用例なんかはdescriptionに書いてpositional argumentsの前に書いてしまうよりは引数の後に書いたほうが見やすさの観点から良いです。
引数の指定
parser.add_argument('dir', help="対象ディレクトリ")
parser.add_argument('month', help="データ取り込み対象月")
parser.add_argument('format', help="ファイルフォーマット")
parser.add_argument('--l', type=int, help="表示する列数")
引数の指定は.add_argument('引数名'、help='説明')
で行うことができます。
オプション引数は宣言の仕方が変わります。
オプション引数は実行の際に宣言しなくてもいい引数のことで、今回の例では列挙する個数(l)が該当します。
この時は引数の前に--をつけて指定をします。
また、typeを指定することができて、オプション変数--lでは引数をintで受け取るように設定しています。
逆にデフォルトでは文字列型なので気をつけましょう。
参考資料
argparse --- Parser for command-line options, arguments and subcommands¶