gpt4 book ai didi

python - 我可以流式传输 Python pickle 列表、元组或其他可迭代数据类型吗?

转载 作者:太空狗 更新时间:2023-10-29 20:17:07 25 4
gpt4 key购买 nike

我经常使用逗号/制表符分隔的数据文件,这些文件可能如下所示:

key1,1,2.02,hello,4
key2,3,4.01,goodbye,6
...

我可能会在 Python 中读取并将其预处理为列表列表,如下所示:

[ [ key1, 1, 2.02, 'hello', 4 ], [ key2, 3, 4.01, 'goodbye', 6 ] ]

有时,我喜欢将这个列表列表保存为 pickle,因为它保留了我的条目的不同类型。但是,如果 pickled 文件很大,那么以流方式读取此列表列表会很棒。

在 Python 中,为了将文本文件作为流加载,我使用以下方法打印出每一行:

with open( 'big_text_file.txt' ) as f:
for line in f:
print line

我可以为 Python 列表做类似的事情吗,即:

import pickle
with open( 'big_pickled_list.pkl' ) as p:
for entry in pickle.load_streaming( p ): # note: pickle.load_streaming doesn't exist
print entry

是否有像“load_streaming”这样的 pickle 函数?

最佳答案

这行得通。

然而,它所做的是从文件中解开一个对象,然后将文件的其余内容打印到 stdout

你可以做的是:

import cPickle
with open( 'big_pickled_list.pkl' ) as p:
try:
while True:
print cPickle.load(p)
except EOFError:
pass

这将取消文件中的所有对象,直到到达 EOF。


如果你想要像 for line in f: 这样的东西,你可以很容易地把它包起来:

def unpickle_iter(file):
try:
while True:
yield cPickle.load(file)
except EOFError:
raise StopIteration

现在你可以这样做:

with open('big_pickled_list.pkl') as file:
for item in unpickle_iter(file):
# use item ...

关于python - 我可以流式传输 Python pickle 列表、元组或其他可迭代数据类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17623523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com