Я не могу декодировать сгенерированную строку в Python dict - PullRequest
0 голосов
/ 04 октября 2019

У меня есть строка, но я не могу расшифровать ее, чтобы продиктовать, используя ast.literal_eval

НАЙТИ ОШИБКУ, ЗАПИШИТЕ НЕПРАВИЛЬНУЮ СТРОКУ!

строка, которую он должен преобразовать: (ссылка на Google Dock) https://docs.google.com/document/d/1jGjIPEzB9j48i1LDKQ2__Nhg5OE4R_jeaGCFq_DFr2M/edit?usp=sharing

Откат:

Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:/Users/user/Documents/Python/Documents/pickle_viewer/PickleViewer.py", line 444, in selectItem
    item_dict = ast.literal_eval(itemInfo["tags"][2])
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\ast.py", line 46, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\ast.py", line 35, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1

Код для преобразования:

item_dict = ast.literal_eval(itemInfo["tags"][2])

Это генерирует строку:

    def json_tree(tree, parent, dictionary):
                tmp_key = tree.insert(parent, 'end', uid, text=key + ' [...]', value="[...]", tag=(uid, True, dictionary[key]))

Я думаю, что это из-за всех обратных слешей, но я не знаю, откуда они берутся

Ссылка на воспроизводимый код в Google Docs: https://docs.google.com/document/d/1CDSNqi3FqgRaVUv-N5eoV5R3xxS_atbSybaYXmC5cNE/edit?usp=sharing

Кто-нибудь может мне помочь? Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Обновленный ответ:

Вам необходимо очистить исходные данные, поскольку их форматирование недопустимо, а затем проанализировать их как строку json:

Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)] on win32
import json
source = <your_very_long_input_loaded_as_raw_string_comes_here>
source = source.replace('\\', '')
source = source.replace('\'', '"')
source = source.replace('} {"comments"', '}, {"comments"')
source = "[" + source + "]"
d = json.loads(source)

1 голос
/ 04 октября 2019

Извините, это была моя вина, я неправильно расшифровал стартовую строку. Теперь он правильно декодирован, и это спасает меня от всего остального, и я легко могу снова использовать ast.literal_eval (STRING).

Тем не менее, большое спасибо за ваши ответы.

...