Что делает рассол? - PullRequest
       9

Что делает рассол?

0 голосов
/ 29 ноября 2018

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

with codecs.open("huge_picklefile.pc", "rb") as f:
    data = pickle.load(f)
    print(len(data))
    data = pickle.load(f)
    print(len(data))
    data = pickle.load(f)
    print(len(data))

Это возвращается ко мне:

335
59
12

Я запутался.Я использую, чтобы засолить загрузку массивного файла в память.Сам объект представляет собой массив массивов (я полагаю).Может ли он состоять из нескольких маринованных объектов?К сожалению, я не создал объект рассола, и у меня нет доступа к тому, кто это сделал.

Я не могу понять, почему Pickle разделяет мой файл на куски, что не является значением по умолчанию, и я не говорю об этом.Что делает перезагрузка того же файла?Я, честно говоря, никогда не пробовал и даже не сталкивался с примером использования до сих пор

Я потратил целых 5 часов, пытаясь понять, как вообще задать этот вопрос в Google.Неудивительно, что попытка «многократной загрузки одного и того же документа» не дает ничего слишком полезного.Документация Python 3.7 не описывает это поведение.Я не могу понять, как многократная загрузка документа маринованного файла не приводит к (а) сбою или (б) загрузке всего объекта в память, а затем просто ссылается на него.За 15 лет использования Python я никогда не сталкивался с этой проблемой ... поэтому я делаю прыжок с верой в то, что это просто странно, и мы, вероятно, должны просто использовать базу данных.

1 Ответ

0 голосов
/ 30 ноября 2018

Этот файл не совсем файл рассола.Кто-то сбросил несколько огурцов в один и тот же файл, в результате чего содержимое файла стало объединением нескольких огурцов.Когда вы вызываете pickle.load(f), pickle будет читать файл из текущей позиции файла, пока не найдет конец рассола, поэтому каждый вызов pickle.load загрузит следующий рассол.

Вы можете создать такой файлВы сами звоните pickle.dump:

with open('demofile', 'wb') as f:
    pickle.dump([1, 2, 3], f)
    pickle.dump([10, 20], f)
    pickle.dump([0, 0, 0], f)
...