В Python, Как удалить различные нежелательные кавычки в строке, чтобы создать / преобразовать в словарь - PullRequest
0 голосов
/ 06 марта 2012

У меня есть строка в следующем виде:

testline = "{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}"

Я хотел бы заменить двойные двойные кавычки одинарными двойными кавычками (") и убрать начальную и конечную двойные кавычки до словаря.

Пока что у меня есть что-то вроде этого, которое очень не выполняет то, что я хочу.

import ast
# testline = testline.strip(")
testline = testline.replace('""', '"')
testlinedict = ast.literal_eval(testline)

Это до сих пор дает ValueError: malformed string

Я хочу, чтобы конечный результат был:

testlinedict = {"key1": "value1", "key2": {"value2-subkey1": "value2-subvalue2"}}

Ответы [ 3 ]

6 голосов
/ 07 марта 2012

Проблема в том, что двойные кавычки фактически интерпретируются Python, но не так, как вы ожидали:

>>> testline = "{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}"
>>> testline
'{key1: value1, key2: {value2-subkey1: value2-subvalue2}}'

Это потому, что в Python, как и в C, несколько строковых литералов, следующих друг за другом,интерпретируется как одна большая строка, поэтому "abc""def" == "abcdef".

Если вы правильно определите testdata, ваше решение будет работать:

>>> testline = '{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}'
>>> literal_eval(testline.replace('""', '"'))
{'key2': {'value2-subkey1': 'value2-subvalue2'}, 'key1': 'value1'}

Или, если первая и последняя кавычки фактически являются частью строки:

>>> testline = '"{""key1"": ""value1"", ""key2"": {""value2-subkey1"": ""value2-subvalue2""}}"'
>>> literal_eval(testline[1:-1].replace('""', '"'))
{'key2': {'value2-subkey1': 'value2-subvalue2'}, 'key1': 'value1'}
1 голос
/ 07 марта 2012
testline=testline.replace("\"\"","\"")[1:-1]
0 голосов
/ 06 марта 2012
testline = testline.replace('""', '"')
testline = testline[1:-1]

Сначала замените двойные двойные кавычки, затем просто уберите первый и последний символы, чтобы удалить начальные и конечные двойные кавычки.

Если вы действительно хотите получить словарный объект, а не строковое представление, то вы должны использовать что-то вроде ast.literal_eval() для загрузки строки в виде кода Python (или json.loads() для загрузки в виде JSON) .

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