Текстовая строка, возвращаемая по запросу, не выводится в списке ast.literal_eval - PullRequest
0 голосов
/ 29 декабря 2018

Вызов API с запросами на поиск описания кода.API возвращает строку, которая выглядит как список.У меня проблемы с преобразованием строки в список с помощью ast.literal_eval.Я перепробовал множество вариантов типа ответа (.text, .raw и т. Д.), А также варианты map, str и т. Д. Для преобразования строки.Хотел бы получить ответ в любой пригодный для использования объект Python.

import requests
import ast

burl = "https://clinicaltables.nlm.nih.gov/" \
"api/icd10cm/v3/search?sf=code,name&maxList=1&terms="

dotted_code = "W59.21XS"

r = requests.get(burl+dotted_code).text

print(r)

ответ: [1, ["W59.21XS"], null, [["W59.21XS", "Укушен черепахой,последствия "]]]

но если я добавлю:

l = ast.literal_eval(r)
print(l)

, я получу:

Файл" D: \ Local \ Continuum \ anaconda3 \ lib \ ast.py", строка 55, в _convert_num повысить ValueError ('неверно сформированный узел или строка:' + repr (node))

ValueError: неправильно сформированный узел или строка: <_ast.Name объект в 0x0000015A01B670B8>

Есть ли лучший способ получить возвращаемый текст в пригодный для использования объект Python?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Причина , почему literal_eval не работает, заключается в том, что null не существует в Python, поэтому literal_eval не знает, что с ним делать.Если бы вы изменили null на None (или на строку 'null'), то literal_eval сработало бы:

>>> literal_eval('''[1,["W59.21XS"], None, [["W59.21XS","Bitten by turtle, sequela"]]]''')
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]

Вы можете использовать response.json:

>>> r = requests.get('https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name&maxList=1&terms=W59.21XS')
>>> r.json()
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
#                 ^ Note that null was automatically converted to None
0 голосов
/ 29 декабря 2018

Это JSON:

>>> import json
>>> json.loads("""[1,["W59.21XS"],null,[["W59.21XS","Bitten by turtle, sequela"]]]""")
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
...