编写数据流时,python gzip“意外的文件结束”

时间:2014-05-04 00:01:20

标签: python python-2.7 gzip

我正在将实时数据流写入(或更确切地说,附加)到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文件会损坏。在这种情况下,在该点之后附加的任何数据都变得不可读。

谢谢!

1 个答案:

答案 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()

请注意,除非您发现错误,否则错误仍将与此代码一起传播。但该文件将被关闭。