使用 Argparse 读取配置
Posted
技术标签:
【中文标题】使用 Argparse 读取配置【英文标题】:Reading Configurations using Argparse 【发布时间】:2018-04-09 15:27:28 【问题描述】:在一个单独的配置文件中,我有以下内容:
charge 0
在我的程序中,我尝试使用 argparse 以便可以从另一个文件中读取一些配置。但是,输出是这样的:
Namespace(charge='charge 0')
我应该如何编写 add_argument 或 parse_args 以在我的值中排除“charge”一词?
【问题讨论】:
你是如何阅读这个文件的?使用fromfile_prefix_chars
机制?如果你展示了一个基本的工作parser
,这可能会有所帮助。
我用了这 3 行: parser = argparse.ArgumentParser(fromfile_prefix_chars='@') parser.add_argument('charge', metavar='Charge', type=str) args = parser.parse_args( )
你定义了一个positional
,它需要1个字符串。默认的@
阅读器从文件的每一行获取 1 个字符串。效果与您使用prog.py "charge 0"
给出命令行相同。解析后必须自己处理字符串。
文档也有一个关于自定义前缀文件阅读器的小节。
就解析字符串而言,这是使用另一个模块,还是可以使用 argparse?
【参考方案1】:
如果您希望能够在文件中省略“charge”,则继承 ArgumentParser
并覆盖 convert_arg_line_to_args
。
import argparse
class MyArgumentParser(argparse.ArgumentParser):
def convert_arg_line_to_args(self, arg_line):
"""Remove the label from a given argument."""
try:
return arg_line.split()[1:] # given 'charge 0', returns ['0']
except IndexError:
return arg_line.split() # Only one element, just return in a list.
【讨论】:
以上是关于使用 Argparse 读取配置的主要内容,如果未能解决你的问题,请参考以下文章