我的代码和数据结构导致以下输出:
Actions = set()
# loop through and obtain a list of files and commands
for item in d['server']:
Actions.add('{action}'.format(**item))
print(Actions)
commands = list(Actions)
commands = list(Actions)
输出:
Actions = {"{'command1': ['uptime'], 'path': ['/var/log/syslog']}", "{'command1': ['df -h'], 'path': ['/var/log/auth.log']}"}
我需要分别提取命令和路径,而这种方法不起作用。
print(commands[0]['command1'])
Traceback (most recent call last):
文件“ read_shell_yaml.py”,第46行,在 打印(命令[0] ['命令1']) TypeError:字符串索引必须为整数
答案 0 :(得分:0)
您正在使用item
方法将str.format
字典格式化为字符串,这可以防止后面的代码从字典中提取项目。
出于您的目的,Actions
的更合适的数据结构将是由命令索引的字典,而不是:
Actions = {}
for item in d['server']:
Actions[items.pop('command1')] = item
,以便您以后可以像这样遍历Actions
字典的项目:
for command, properties in Actions.items():
print(command, properties['path'])
答案 1 :(得分:0)
如果您需要按照以前的方式进行操作,则可以在最后:
import json
content = json.loads(command[0].replace("'", '"'))
content['command1'] #prints ['df -h']