如何使用 pickle.load() 读取完整文件?
How to read complete file usind pickle.load()?
假设,我想使用 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
官方 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
中序列化的对象。
你可以用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))
假设,我想使用 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
官方 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
中序列化的对象。
你可以用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))