【发布时间】:2010-09-29 17:24:56
【问题描述】:
我正在查询数据库并使用 Python 归档结果,并且我正在尝试在将数据写入日志文件时对其进行压缩。不过,我遇到了一些问题。
我的代码如下所示:
log_file = codecs.open(archive_file, 'w', 'bz2')
for id, f1, f2, f3 in cursor:
log_file.write('%s %s %s %s\n' % (id, f1 or 'NULL', f2 or 'NULL', f3))
但是,我的输出文件大小为 1,409,780。对文件运行 bunzip2 会生成大小为 943,634 的文件,运行 bzip2 会生成大小为 217,275 的文件。换句话说,未压缩的文件比使用 Python 的 bzip 编解码器压缩的文件要小得多。 除了在命令行上运行bzip2 之外,还有其他方法可以解决这个问题吗?
我尝试了 Python 的 gzip 编解码器(将行更改为 codecs.open(archive_file, 'a+', 'zip')),看看它是否解决了问题。我仍然会收到大文件,但当我尝试解压缩文件时也会收到gzip: archive_file: not in gzip format 错误。 那里发生了什么?
编辑:我最初以追加模式打开文件,而不是写入模式。虽然这可能是也可能不是问题,但如果文件以“w”模式打开,问题仍然存在。
【问题讨论】:
-
为什么要打开文件进行追加?
-
这会逐渐从数据库中修剪记录并将它们保存到存档文件中,因此存档文件会逐渐增长,直到从机器本身复制出来。
标签: python gzip python-2.x bzip2