#python #python-3.x
#python #python-3.x
Вопрос:
Я извлекаю огромный список политик из программы, использующей API на Python.
Когда я извлекаю их с помощью:
response = requests.request("GET", url, headers=headers, data=payload)
if response.status_code != 200:
print(response.text)
print("Invalid Response")
sys.exit(1)
return response.json()
В некоторые значения метаданных добавлены символы.
например, в программе имя политики — «Обеспечить использование учетной записи «root» …» Но в ответе оно представлено как:
"name": 'Ensure the "root" account usage...',
Как вы можете видеть, добавляются два » «.
Теперь, когда я пытаюсь использовать другой API для повторного создания этой политики в программе, он отклоняет ее из-за «».
Ответ представляет собой список словарей. Словари содержат несколько полей метаданных, например, имя (как видно), описание, рекомендации и т.д. в котором возникает эта проблема.
Вопрос: Как я могу перебрать свой список словарей в ответе и удалить все «» или есть лучший способ сделать это?
Приветствия!
Обновление: пример ответа API с удаленными данными
[
{
"policyId": "text",
"name": "text",
"policyType": "text",
"policySubTypes": [
"text"
],
"systemDefault": boolean,
"description": "text.",
"severity": "text",
"rule": {
"name": "text",
"criteria": "text",
"parameters": {
"savedSearch": "text"
},
"type": "text"
},
"recommendation": "text u00a0 u00a0 text u00a0 text"
"cloudType": "",
"complianceMetadata": {
"standardName": "text",
"standardDescription": "text",
"requirementId": 1,
"requirementName": "text",
"sectionId": "text",
"sectionDescription": "text",
"complianceId": "text",
"policyId": "text/number",
"systemDefault": "boolean",
"customAssigned": "boolean"
},
"labels": [
"text"
],
"enabled": boolean,
"deleted": boolean,
"remediable": boolean
},
]
Ответ №1:
Просто сделайте замену на newstr = oldstr.replace("\", "")
.
Для циклического просмотра списка словарей:
for dic in dic_list:
for k,v in dic.items():
if isinstance(v, str):
dic[k] = v.replace("\", "")
Комментарии:
1. Я не могу использовать .replace, потому что «» является escape-символом? Он выдает ошибки, если я пытаюсь .replace(«»,»»)
2. @RyanBrown Если вы считаете, что в строке действительно есть буквальное «», это
.replace("\", '')
должно сработать…3. Итак, я попробовал это, заменив «dic_list» на переменную «список словарей», но я столкнулся с этим: AttributeError: объект ‘list’ не имеет атрибута ‘replace’
4. Структура данных может отличаться от того, что вы описали тогда… значения вашего словаря могут быть списками, а не просто строками — добавьте этот цикл.
5. Я обновил OP примером структуры с удаленными данными. Эта структура словаря реплицируется много раз в списке. Обратите внимание, я также получаю эти u00a0 и т. Д. И другие странные символы