www*_*iam 9 python streaming pickle ipython
我使用逗号/制表符分隔的数据文件,通常可能如下所示:
key1,1,2.02,hello,4
key2,3,4.01,goodbye,6
...
Run Code Online (Sandbox Code Playgroud)
我可以在Python中阅读并预处理这个列表,如下所示:
[ [ key1, 1, 2.02, 'hello', 4 ], [ key2, 3, 4.01, 'goodbye', 6 ] ]
Run Code Online (Sandbox Code Playgroud)
有时,我喜欢将这个列表列表保存为pickle,因为它保留了不同类型的条目.但是,如果pickle文件很大,那么以流式方式读回这个列表列表会很棒.
在Python中,要将文本文件作为流加载,我使用follwoing打印出每一行:
with open( 'big_text_file.txt' ) as f:
for line in f:
print line
Run Code Online (Sandbox Code Playgroud)
我可以为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
Run Code Online (Sandbox Code Playgroud)
有没有像"load_streaming"这样的泡菜功能?
mat*_*ata 12
这会奏效.
但是,从文件中取出一个对象,然后打印文件内容的其余部分 stdout
你能做的是:
import cPickle
with open( 'big_pickled_list.pkl' ) as p:
try:
while True:
print cPickle.load(p)
except EOFError:
pass
Run Code Online (Sandbox Code Playgroud)
这将从文件中取消所有对象,直到达到EOF.
如果你想要一些类似的东西for line in f:,你可以轻松地将其包装起来:
def unpickle_iter(file):
try:
while True:
yield cPickle.load(file)
except EOFError:
raise StopIteration
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
with open('big_pickled_list.pkl') as file:
for item in unpickle_iter(file):
# use item ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4952 次 |
| 最近记录: |