我正在将实时数据流写入(或更确切地说,附加)到python的gzip模块的实例。如果正在编写流的程序崩溃并重新启动,我希望流自动附加到原始文件。不幸的是,这在实践中失败了,因为我得到了“意外的文件结束”错误,该错误对应于原始程序崩溃的确切点。
处理这种情况的基本方法是什么,因为我无法想象这应该是一个难题。我的方法概述如下:
f = gzip.GzipFile( 'filename_json.txt.gz' ), mode='at', compresslevel=9)
while(something_is_true):
f.write(stream['message'] + '\n')
f.close()
这会持续运行,但如果程序崩溃(或被杀死),文件结束操作符永远不会被追加,并且gzip文件会损坏。在这种情况下,在该点之后附加的任何数据都变得不可读。
谢谢!
答案 0 :(得分:1)
with gzip.open('filename_json.txt.gz', mode='at', compresslevel=9) as f:
while something_is_true:
f.write(stream['message'] + '\n')
(这适用于我在python 2.7.6上)
但如果由于某种原因不起作用,你可以用老式的方式做到:
try:
f = gzip.open('filename_json.txt.gz', mode='at', compresslevel=9)
while something_is_true:
f.write(stream['message'] + '\n')
finally:
f.close()
请注意,除非您发现错误,否则错误仍将与此代码一起传播。但该文件将被关闭。