Преобразование юникода в строку с помощью "" - PullRequest
0 голосов
/ 11 марта 2019

В настоящее время я работаю над сценарием для удаления ресурсов aws с использованием aws cli и python.Как часть моего сценария, я должен удалить правила группы безопасности.Подход, который я выбрал, заключается в том, что я выполняю команду describe-security-groups и могу сохранить в переменной следующее значение:

[{u'IpProtocol':u'-1',u'PrefixListIds':[],u'IpRanges':[{u'CidrIp':u'0.0.0.0/0'}],u'UserIdGroupPairs':[],u'Ipv6Ranges':[]}]

Однако для передачи этого значения вrevoke-security-group-egress команда, она мне нужна в следующем виде:

[{"IpProtocol":"-1","PrefixListIds":[],"IpRanges":[{"CidrIp":"0.0.0.0/0"}],"UserIdGroupPairs":[],"Ipv6Ranges":[]}]

Я ищу способ, который можно было бы использовать и для других списков с другими структурами.

Или есть другой способ удалить все правила группы безопасности, используя aws cli и python?

- ОБНОВЛЕНИЕ -

Я нашелспособ приблизиться к тому, что я хотел после прочтения ответа здесь

1 Ответ

0 голосов
/ 11 марта 2019

Это может быть излишним, но вы можете сделать это следующим образом:

import ast

# if your data comes in as an actual list, convert it to a string
data = "[{u'IpProtocol':u'-1',u'PrefixListIds':[],u'IpRanges':[{u'CidrIp':u'0.0.0.0/0'}],u'UserIdGroupPairs':[],u'Ipv6Ranges':[]}]"

AST = ast.parse(data, mode='eval')

for node in ast.walk(AST):
    if isinstance(node, ast.Str):
        node.s = str(node.s) # replace `unicode` with `str`

res = ast.literal_eval(AST)

res == [{'IpProtocol': '-1', 'Ipv6Ranges': [], 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'UserIdGroupPairs': [], 'PrefixListIds': []}]

Документы на ast модуле .Это также работает в Python 3.

Если вы точно знаете структуру ваших данных (какие значения могут иметь ваши словари, сколько существует словарей), вы можете просмотреть все ключи и значения вашего словаря (и каждый словарь в списке) и измените все с типа unicode на str.Это может быть намного более громоздким, но может быть быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...