Как прочитать полный файл usind pickle.load ()? - PullRequest
0 голосов
/ 13 апреля 2020

Предположим, я хочу прочитать весь файл, используя pickle.load (), а не только одну строку. Я знаю, что могу использовать try - except, но есть ли другой способ прочитать его?
Я использую это:


    import pickle
    d = {}
    for i in range(2):
        roll_no = int(input("Enter roll no: "))
        name = input("Enter name: ")
        d[roll_no] = name

     f = open("test.dat", "ab")
     pickle.dump(d, f)
     f.close()

     f = open("test.dat", "rb")
     while True:
         try:
            print(pickle.load(f))
        except EOFError:
            break

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Вы можете использовать file.tell, чтобы узнать, находитесь ли вы на EOF

f = open("test.dat", "rb")
# go to end of file and get position
size = f.seek(0, 2)
# now return to the front and pull pickle records
f.seek(0)    
while f.tell() < size:
    print(pickle.load(f))
0 голосов
/ 13 апреля 2020

Официальная библиотека Python не поддерживает это в рамках одной инструкции. Вы можете определить свою собственную вспомогательную функцию, хотя:

import io
import pickle

from typing import List

def unpickle(file: io.IOBase) -> List[object]:
    result = []
    while True:
        try:
            result.append(pickle.load(file))
        except EOFError:
            break
    return result

Затем вы можете вызвать ее так:

with open('data.pickle', 'rb') as f:
    objects = unpickle(f)

objects будет содержать все объекты, которые имеют был сериализован в data.pickle здесь.

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