作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我经常使用逗号/制表符分隔的数据文件,这些文件可能如下所示:
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/
我是一名优秀的程序员,十分优秀!