Существует ли высокоуровневый способ чтения строк из выходного файла и распознавания типов по структуре содержимого?

StackOverflow https://stackoverflow.com/questions/900396

  •  23-08-2019
  •  | 
  •  

Вопрос

Предположим, у меня есть выходной файл, который я хочу прочитать, и каждая строка была создана путем объединения нескольких типов вместе, предварения списка фигурными скобками,

[('tupleValueA','tupleValueB'), 'someString', ('anotherTupleA','anotherTupleB')]

Я хочу прочитать строки в.Теперь я могу прочитать их и оперировать со строкой для присвоения значений и типов, но мне было интересно, есть ли у Python метод более высокого уровня для этого.

После создания функции для этого я попытался найти подход более высокого уровня, но так и не нашел ни одного.

Это было полезно?

Решение

То, что вы ищете, это оценка.Но, пожалуйста, имейте в виду, что эта функция будет оценивать и выполнять строки.Так что никогда не запускайте его при ненадежном вводе!

>>> print eval("[('tupleValueA', 1), 'someString']")
[('tupleValueA', 1), 'someString']

Если у вас есть контроль над скриптом, который генерирует выходной файл, то я бы посоветовал вам использовать json кодирование.Формат JSON очень похож на строковое представление списков и словарей в python.И будет гораздо более безопасным и надежным для чтения.

>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> json.loads('["foo", {"bar": ["baz", null, 1.0, 2]}]')
["foo", {"bar": ["baz", null, 1.0, 2]}]

Другие советы

Проблема, которую вы описываете, условно называется сериализация. Объектная нотация JavaScript (JSON) это один из популярных протоколов сериализации.

Вероятно, было бы лучше хранить данные с помощью модуля типа маринованный огурец во-первых, вместо того, чтобы использовать обычные строки.Таким образом, вы избежите множества проблем, которые приходят с eval и получите более надежное решение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top