如何为此参数指定type = FileType(...)时使用argparse获取文件名

jac*_*uac 15 python argparse

使用方法的type参数argparse.add_argument,您可以要求参数为可读文件:

parser.add_argument('--sqlite-file', type=argparse.FileType('r'))
Run Code Online (Sandbox Code Playgroud)

作为指定此类型的好处,argparse会检查是否可以读取文件,如果没有,则会向用户显示错误.

有没有办法获取传递的文件名而不是io.TextIOWrapper或的实例io.BufferedReader

由于文件名出现在解析器('sqlite_file': <_io.TextIOWrapper name='data/export.sqlite' ...,或'sqlite_file': <_io.BufferedReader name='data/export.sqlite' ...>)的字符串表示中,因此应该是可能的.

怎么做?

Mar*_*ers 22

是的,使用文件对象上的.name属性.

演示:

>>> 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'
Run Code Online (Sandbox Code Playgroud)