読み取り可能な複数のファイル名を入力できるargparseで引数を作成しようとしています。この例では、各ファイルオブジェクトを印刷して正しく動作することを確認していますが、エラーを取得する:
error: unrecognized arguments: f2.txt f3.txt
。どうすればそれらすべてを認識させることができますか?
ターミナルでコマンドを実行してプログラムを実行し、複数のファイルを読み取ります
python program.py f1.txt f2.txt f3.txt
Pythonスクリプト
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('file', nargs='?', type=file)
args = parser.parse_args()
for f in args.file:
print f
if __name__ == '__main__':
main()
nargs='?'
b/cを使用しました。使用可能な任意の数のファイルにする必要があります。 add_argument
を次のように変更した場合:
parser.add_argument('file', nargs=3)
その後、文字列として印刷できますが、「?」で動作させることはできません
読み取り可能なファイルを1つ以上読み取ることを目標とする場合は、これを試すことができます。
_parser.add_argument('file', type=argparse.FileType('r'), nargs='+')
_
_nargs='+'
_は、すべてのコマンドライン引数をリストに収集します。また、1つ以上の引数がある必要があります。そうでない場合、エラーメッセージが生成されます。
type=argparse.FileType('r')
は、読み取り用のファイルとして各引数を開こうとします。 argparseがファイルを開けない場合、エラーメッセージが生成されます。これを使用して、引数が有効で読み取り可能なファイルであるかどうかを確認できます。
または、目標がゼロ以上読み取り可能なファイルを読み取ることである場合は、単に_nargs='+'
_を_nargs='*'
_に置き換えることができます。コマンドライン引数が指定されていない場合、空のリストが表示されます。ファイルを指定していない場合は、stdinを開くこともできます。その場合は、_default=[sys.stdin]
_をパラメーターとして_add_argument
_に追加します。
そして、リスト内のファイルを処理するには:
_args = parser.parse_args()
for f in args.file:
for line in f:
# process file...
_
Nargsの詳細: https://docs.python.org/2/library/argparse.html#nargs
タイプの詳細: https://docs.python.org/2/library/argparse.html#type
少なくとも1つの引数があることを確認する必要がありました
parser.add_argument('file',nargs='*')