Python: 解析多种数据类型使用argpars

2024-09-27 07:28:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用argparse来了解它是如何解析给定列表的:

parser = argparse.ArgumentParser()

parser.add_argument('--ls', nargs='*', type=str, default = [])
Out[92]: _StoreAction(option_strings=['--ls'], dest='ls', nargs='*', const=None, default=[], type=<type 'str'>, choices=None, help=None, metavar=None)

args = parser.parse_args("--ls 'tomato' 'jug' 'andes'".split())

args
Out[94]: Namespace(ls=["'tomato'", "'jug'", "'andes'"])

args.ls
Out[96]: ["'tomato'", "'jug'", "'ande'"]

args.ls[0]
Out[97]: "'tomato'"

eval(args.ls[0])
Out[98]: 'tomato'

问题1:上述方法可行,但有没有更好的方法来访问列表中的值?在

然后我试着用dictionary来解析给定的字典:

^{pr2}$

但那没用。 问题2:以上这些在字典中是如何工作的?在

问题3:现在我想要

python my.py --ls tomato jug andes  --dict {'name':'man', 'address': 'kac', 'tags':'don'}

待解析

我该怎么做?在

我指的是http://parezcoydigo.wordpress.com/2012/08/04/from-argparse-to-dictionary-in-python-2-7/

…并且发现在字典下分配所有东西都很有用。有人能简化这项任务以便解析参数中的多个数据类型吗?在


Tags: nonedefaultparser列表字典typeargparseargs
2条回答
import ast
dict_parser.add_argument(' dict', nargs='*',type=ast.literal_eval,default={})
args = dict_parser.parse_args([" dict", "{'name':'man', 'address': 'kac', 'tags':'don'}"])

parser.add_argument(' ls', nargs='*', type=str, default = []) Q1: The above works but Is there a better way to access values in the list?

我经常认为“越简单越好”,这是一种非常简单的做事方法,我认为没有更好的方法。但是,还有其他方法。在

dict_parser.add_argument(' dict', nargs='*',type=dict,default={}) arg2 = dict_parser.parse_args(" dict {'name':'man', 'address': 'kac', 'tags':'don'}") Q2: How does the above work for dictionary?

我建议您使用json解析字符串:

>>> class FromJSON():
...     def __init__(self, string):
...         self.string = string
...     def decode(self):
...         return json.loads(self.string)
...    
>>> dict_parser.add_argument(' dict',type=FromJSON)
>>> arg2 = dict_parser.parse_args([' dict', '{"name":"man", "address": "kac", "tags":"don"}'])

虽然python不像python,但它不像python。它对引号(值仅被双引号包围)和(没有的尾随逗号)很挑剔。但至少它是安全的代码注入!当然,你应该用引号括住参数

您可能还有另一种解决方案,可以将dict作为参数,即去掉括号:

^{pr2}$

问题3:现在我想要

python my.py  ls tomato jug andes   dict {'name':'man', 'address': 'kac', 'tags':'don'}

待解析

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument(' dict', type=FromJSON, default=FromJSON("{}"))
>>> parser.add_argument(' ls', nargs='*', type=str, default = [])
>>> args = parser.parse_args([' ls', 'tomato', 'jug', 'andes', ' dict', '{"name":"man", "address": "kac", "tags":"don"}'])
>>> args.ls
['tomato', 'jug', 'andes']
>>> args.dict
<__main__.FromJSON instance at 0x7f932dd20c20>
>>> args.dict.decode()
{u'tags': u'don', u'name': u'man', u'address': u'kac'}

关于FromJSON(),可以对其进行改进,使其类似于:

class JsonToDict():
    def __call__(self, string):
        return json.loads(string)

您可以使用如下:

dict_parser.add_argument(' dict',type=JsonToDict())

高温

相关问题 更多 >

    热门问题