web-dev-qa-db-ja.com

この引数にtype = FileType(...)を指定しながら、argparseでファイル名を取得する方法

argparse.add_argumentメソッドのtypeパラメーターを使用すると、引数を読み取り可能なファイルにする必要があります。

parser.add_argument('--sqlite-file', type=argparse.FileType('r'))

このタイプを指定する利点として、argparseはファイルを読み取ることができるかどうかをチェックし、読み取れない場合はユーザーにエラーを表示します。

io.TextIOWrapperまたはio.BufferedReaderのインスタンスの代わりに、渡されたファイル名を取得する方法はありますか?

ファイル名はパーサーの文字列表現('sqlite_file': <_io.TextIOWrapper name='data/export.sqlite' ...、または'sqlite_file': <_io.BufferedReader name='data/export.sqlite' ...>)に表示されるため、可能であるはずです。

どうやるか?

16
jack_kerouac

はい、 .name attribute ファイルオブジェクト。

デモ:

>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--sqlite-file', type=argparse.FileType('r'))
_StoreAction(option_strings=['--sqlite-file'], dest='sqlite_file', nargs=None, const=None, default=None, type=FileType('r'), choices=None, help=None, metavar=None)
>>> args = parser.parse_args(['--sqlite-file', '/tmp/demo.db'])
>>> args.sqlite_file
<_io.TextIOWrapper name='/tmp/demo.db' mode='r' encoding='UTF-8'>
>>> args.sqlite_file.name
'/tmp/demo.db'
24
Martijn Pieters