Pythonのargparseモジュールの基本的な使い方のまとめ
記事ディレクトリ
1 はじめに
argparse は、Python 標準でコマンドライン引数を処理するためのライブラリです。
2.使用する
2.1 パラメータパーサーオブジェクトの初期化
ArgumentParser オブジェクトは、コマンド ライン パラメーターを対応する Python データ型に解析するために必要なすべての情報を保存します。description パラメーターは、コマンド ラインにヘルプ情報を表示することを意味します。このオブジェクトには他のパラメータもありますが、通常はめったに使用されないため、ここでは説明しません。詳細については、公式ドキュメントを参照してください。
import argparse
# 创建参数解析器:一个用于把命令行字符串解析成Python对象的对象
parser = argparse.ArgumentParser(description="这是一个argparser使用示例程序")
2.2 パラメータの追加
パラメータを追加するには、add_argument() メソッドを使用します。このメソッドのパラメータについては以下で説明します。
Add_argument() メソッドのパラメータの説明
-
名前またはフラグ- 必須パラメータ名またはオプションのパラメータ識別子。add_argument() メソッドの最初のパラメータである必要があります。
コマンドラインパラメータは、位置パラメータとオプションパラメータに分かれています。
-
位置 (必須) パラメータ: - または – は前に付ける必要はありません。このメソッドはパラメータの入力を必要とします。パラメータの入力にはパラメータ名を指定する必要はありません。指定されている場合はエラーが報告され、インタープリタは入力パラメータを対応するパラメータに自動的に割り当てます。
-
オプションのパラメータ: パラメータ入力を簡素化するために - で指定される短いパラメータ (-e など)、- で指定される長いパラメータ (-epoch など)。短いパラメーターと長いパラメーターを入力すると、コマンド ラインに入力するときに同じ効果が得られます。解析されたパラメーターを通じて値を取得する場合は、名前に – を使用する必要があることに注意してください。
-
-
dest - プログラム内のパラメータに対応する変数名
-
action - キーに値を割り当てる方法を示します。ここでは bool 型が使用されます。action は、指定されたパラメータが読み取りパラメータに現れたときの動作を意味します。
- store : デフォルトのアクション モード。指定された変数に値を保存します。
- store_const : 保存された値はパラメータの const 部分で指定されます。これは主に非ブール値のコマンド ライン フラグを実装するために使用されます。
- store_true / store_false : ブール値スイッチ。store_true はデフォルトでは False で、入力の場合は true です。代わりにstore_falseを使用してください。使用法: action 属性を持つパラメーターがコマンド ライン (ターミナル) に表示される場合、パラメーターの値は "store_true" で表されます。コマンド ラインに action 属性を持つパラメーターがない場合、パラメーターの値はis "store_true" "表現された相対値は false です。
- append : 値をリストに保存します。このパラメータは再利用できます。
- append_const : リストに値を格納します。格納された値はパラメータの const 部分に指定されます。
- count : 統計パラメータの短縮入力の数。
- version : バージョン情報を出力して終了します。
-
help - パラメータの説明情報
-
required - パラメータを入力する必要があるかどうかを示します。オプションの、デフォルトは False です。
-
type - コマンドラインパラメータのデータ型を指定します。
-
選択肢- コマンド ライン パラメーターの値の範囲を示し、その値は通常はリストです。選択リスト内の要素のタイプは、type で指定されたタイプと互換性がある必要があります。
-
nargs - このパラメータの背後にある値の数を指定します。デフォルトは 1 です。
- 2 などの数値に設定されている場合は、2 つの値を受け入れることを意味します。
- 「?」に設定すると、1 または 0 の値のみが受け入れられます。
- 「*」に設定されている場合は、その後に 0 個以上の値を続けることができます。
- 「+」に設定されている場合は、1 つ以上の値を接続できることを意味します。
-
デフォルト- 必須およびオプションのパラメータのデフォルト値。
一般的に使用されるパラメータは、主に名前またはフラグ、アクション、ヘルプ、タイプ、デフォルトです。
例1
import argparse
# 创建参数解析器:一个用于把命令行字符串解析成Python对象的对象
parser = argparse.ArgumentParser(description="这是一个argparser使用示例程序")
# 添加一个可选参数,使用时,输入-lr和--learning_rate效果一样,但是解析时必须用learning_rate取出
parser.add_argument('-lr', '--learning_rate', default=1e-5, type=float, help='学习率')
# 添加一个可选参数,输入必须是bert/roberta/albert中的一个,否则报错
parser.add_argument('--model', default='bert', choices=['bert', 'roberta', 'albert'], help='模型')
# 添加一个可选参数,没有其他约束
parser.add_argument('--n_heads', type=int, help='注意力头数')
# 添加两个位置参数,必须输入,会按顺序赋值。输入该参数不需要指定参数名称,指定反而报错
parser.add_argument('epoch')
parser.add_argument('n_layers')
2.3 パラメータの解析
parse_args()
追加された引数は parse_args() を使用して解析され、コマンド ラインが検査され、各引数が適切な型に変換され、適切なアクションが呼び出されます。ほとんどの場合、これは、コマンド ラインから解析された属性から単純な名前空間オブジェクトが構築されることを意味します。
例 2
例 1 のコードに従います
args = parser.parse_args()
print(args)
print(args.learning_rate)
print(args.model)
print(args.epoch)
print(args.n_layers)
コマンドラインに次のように入力します。
python main.py -lr 2e-5 --model albert 30 6
このコマンドは、learning_rate に 2e-5 を割り当て、model に albert を割り当て、epoch に 30 を自動的に割り当て、n_layers に 6 を自動的に割り当てることを意味します。
出力は次のとおりです。
Namespace(learning_rate=2e-05, model='albert', n_heads=None, epoch='30', n_layers='6')
2e-05
albert
30
6
- さらに、プログラムとパラメータの説明は「-h」コマンドを使用して表示できますが、プログラムは実行されません。
コマンドラインに次のように入力します。
python main.py -h
# 或python main.py --help
出力は次のとおりです。
usage: main.py [-h] [-lr LEARNING_RATE] [--model {
bert,roberta,albert}] [--n_heads N_HEADS] epoch n_layers
这是一个argparser使用示例程序
positional arguments:
epoch
n_layers
optional arguments:
-h, --help show this help message and exit
-lr LEARNING_RATE, --learning_rate LEARNING_RATE
学习率
--model {
bert,roberta,albert}
模型
--n_heads N_HEADS 注意力头数
例 3: アクションパラメータの説明
parser = argparse.ArgumentParser(description="这是一个argparser使用示例程序")
# 添加一个布尔参数,名为train,当命令中出现这个参数时,即为false,否则为True。
parser.add_argument('--train', action='store_false',default=True)
args = parser.parse_args()
print(args.train)
コマンドを入力し、次のように出力します。
python main.py
## 输出:True
python main.py --train
## 输出:False
上記の例から、default と action_false が同時に満たされる場合、action の優先度が default よりも高くなることがわかります。つまり、「-train」コマンドが表示され、割り当てはデフォルトの True ではなく False になります。
parse_known_args()
このメソッドはパラメータの解析にも使用でき、このメソッドは 2 つのパラメータを返します。
args, unparsed = parser.parse_known_args()
args は、プログラムによって定義されたコマンド ライン パラメータを含む名前空間スペースであり、unparsed はプログラムによって定義されていないコマンド ライン パラメータです。上記の関数との違いは、コマンド ライン入力に定義されたパラメーターがない場合、エラーは報告されず (ただし、 parser_args() はエラーを報告します)、未定義の入力パラメーターを含むリストが解析されていない状態で返されることです。
アプリケーションシナリオ
パラメータ設定は、関数またはパッケージ呼び出し内で行うことはできません。
多くの場合、いくつかの入力パラメータに基づいて他のパラメータの設定を決定する必要がある場合があります。たとえば、深層学習では、受信したモデル設定 (モデル) に基づいてどのモデル コードを呼び出すかを決定する場合があり、その後、モデル内にいくつかのパラメーター設定が存在します。
このとき、設定する必要があるすべてのパラメータ値が実行中のコマンドに渡されるという状況が発生しますが、基本的なパラメータ設定のみが設定されている場合には、いくつかの操作を実行する必要がある場合があります。残りのパラメータ設定のインポートを続行する前に取得してください。
parse_known_args() メソッドの機能は、基本設定のみを取得した場合、後で使用する他の構成が実行中のコマンドに渡された場合、エラーは報告されず、代わりに、後で使用するために余分な部分が保存されることです。。
例 4
import argparse
parser = argparse.ArgumentParser(description="这是一个argparser使用示例程序")
parser.add_argument('--model', default='bert')
parser.add_argument('batch_size')
args, unparsed = parser.parse_known_args()
print(args)
print(unparsed)
コマンドを入力します。
python main.py --model roberta 32 --epoch 100 --lr 1e-5
出力は次のとおりです。
Namespace(model='roberta', batch_size='32')
['--epoch', '100', '--lr', '1e-5']
パーサーに追加されなかったパラメーター epoch と lr がリスト (list) の形式で保存されていることがわかります。