2013-09-19 3 views

ответ

8

YAML - это нейтральный по языку формат, который может представлять примитивные типы (int, string и т. Д.) И хорошо переносится между языками. Вид аналогичен JSON, XML или текстовому файлу; просто с некоторыми полезными соглашениями о форматировании, на самом деле, YAML является надмножеством JSON.

Формат Pickle специфичен для Python и может представлять собой широкий спектр структур данных и объектов, например. Списки, наборы и словари Python; экземпляры классов Python; и комбинации этих подобных списков объектов; объекты, содержащие списки, содержащие списки; и т.д.

Так в основном:

  • YAML представляет простые типы данных & структур в языке переносного образом
  • рассола может представлять сложные структуры, но в неязыковом переносной образом

Существует больше, чем это, но вы попросили «базовую» разницу.

+0

Спасибо и, пожалуйста, не стесняйтесь обращаться более подробную информацию о маринаде и YAML. Например, по каким параметрам мы должны выбрать один из них для сериализации данных и всех (помимо этой языковой переносимости)? – nirprat

+0

@nirprat - это скорость сериализации/десериализации? Что относительно читаемости, вам нужно хранить эти сериализованные файлы в форме, удобной для человека? – alecxe

+0

Структура YAML следует концепции Python отступов; каждый уровень представлен отступом, а маркер закрытия не существует. Сравните с XML, где начинается блок с '', вы должны завершить тот же блок с' '. По этой причине YAML несколько проще копировать, вырезать и вставлять, чем XML или JSON. Самое простое правило: если вы используете только примитивные типы данных, выберите YAML (или JSON), потому что они доступны для чтения, редактирования и переносимости; но если вы используете непримитивные типы данных (например, объекты Python), тогда вы должны использовать Pickle. –

5

pickle это специальный Python формат сериализации когда объект Python преобразуется в поток байтов и обратно:

«Травление» представляет собой процесс, посредством которого объект иерархии Питон преобразуются в поток байтов , а «unpickling» - это обратная операция , в результате которой поток байтов преобразуется обратно в объект .

Главное, что это специфический python.

С другой стороны, YAML является language-agnostic и удобным для чтения формате сериализации.

FYI, если вы выбираете между этими форматами, подумайте:

  • сериализации/скорость derialization (см cPickle модуль)
  • вам нужно хранить файлы сериализованные в читабельной форме?
  • что вы собираетесь сериализовать? Например, если это сложная структура данных на основе python, тогда вы должны пойти с рассолом.

Смотрите также:

+0

Итак, мне нужно кэшировать некоторые статистические данные, которые будут использоваться другими программами для манипулирования статистикой и не будут касаться удобочитаемости человека. – nirprat

+0

@nirprat, если эти сериализованные статистические данные будут использоваться программами, отличными от python, тогда «pickle» - это не путь: выберите между языковыми агностическими форматами: 'YAML',' JSON', 'XML',' CSV' и т. Д. посмотрите на модули 'ujson' и' simplejson' - они довольно быстры по сравнению с модулем 'json'. – alecxe

Смежные вопросы