我有一个命令行脚本,我运行了很多参数.我现在已经到了一个我有太多参数的地方,我想也有一些字典形式的参数.
因此,为了简化操作,我希望使用设置文件来运行脚本.我真的不知道用什么库来解析文件.这样做的最佳做法是什么?我当然可以自己敲一些东西,但是如果有一些库,那我就是耳朵.
一些"要求":
pickle我希望它是一个可以轻松阅读和编辑的直接文本文件.一个简化的伪示例文件:
truck:
color: blue
brand: ford
city: new york
cabriolet:
color: black
engine:
cylinders: 8
placement: mid
doors: 2
Run Code Online (Sandbox Code Playgroud) 我需要使用Python将以下数据写入yaml文件:
{A:a, B:{C:c, D:d, E:e}}
Run Code Online (Sandbox Code Playgroud)
即字典中的字典.我怎样才能做到这一点?
我试图在python中创建一个yaml序列,创建一个自定义的python对象.该对象需要使用之后解构的dicts和列表构建__init__.但是,似乎construct_mapping函数不构造嵌入序列(列表)和dicts的整个树.
考虑以下:
import yaml
class Foo(object):
def __init__(self, s, l=None, d=None):
self.s = s
self.l = l
self.d = d
def foo_constructor(loader, node):
values = loader.construct_mapping(node)
s = values["s"]
d = values["d"]
l = values["l"]
return Foo(s, d, l)
yaml.add_constructor(u'!Foo', foo_constructor)
f = yaml.load('''
--- !Foo
s: 1
l: [1, 2]
d: {try: this}''')
print(f)
# prints: 'Foo(1, {'try': 'this'}, [1, 2])'
Run Code Online (Sandbox Code Playgroud)
这工作得很好,因为f持有的引用l和d对象,这实际上是充满了数据之后的Foo对象被创建.
现在,让我们做一些更复杂的smidgen:
class Foo(object):
def __init__(self, …Run Code Online (Sandbox Code Playgroud) 说我有一个yaml配置文件,例如:
test1:
minVolt: -1
maxVolt: 1
test2:
curr: 5
volt: 5
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令将文件读取到python中:
import yaml
with open("config.yaml", "r") as f:
config = yaml.load(f)
Run Code Online (Sandbox Code Playgroud)
然后我可以使用
config['test1']['minVolt']
Run Code Online (Sandbox Code Playgroud)
在样式方面,使用配置文件中变量的最佳方法是什么?我将在多个模块中使用变量。如果我仅按上述方式访问变量,则如果重命名了某些内容,则需要重命名该变量的每个实例。
只是想知道在不同模块中使用配置文件中的变量的最佳或通用做法是什么。