更改 gzip 文件头的最快方法?

Fastest way to change head of a gzip file?

我维护一个基准库,其中包含 gz 压缩文件,前几行包含描述性元数据。我可以手动解压一个 246MB 的 gz 压缩文件(使用 gunzip),更改它,然后使用 linux 终端在 2 分钟内将其压缩回来(使用 gzip)。在同一个文件上,以下脚本需要将近 5 分钟才能完成(使用 Python 2.7.5)和 12 分钟以上(使用 Python 3.4.1),然后我才将其杀死。

import os, gzip, shutil

def renew_file(file, tempfile):
  f = gzip.open(file,'r')

  try:
    # Read and modify first line(s)
    buf = f.readline()
    buf = 'changing first line\n'

    # Write change to temporary file
    f2 = gzip.open(tempfile,'w')
    try:
      f2.write(buf)
      shutil.copyfileobj(f,f2)
    finally:
      f2.close()

  finally:
    f.close()

  # Overwrite file
  os.rename(tempfile, file)

关于如何实现更高性能有什么建议吗?

命令行上的 Gzip defaults to a compression level of 6. Python, however, defaults to a compression level of 9,速度较慢但生成的文件较小。如果你想尽快获得更大的文件,你可以将 compresslevel=6 传递给 gzip.open(),如果你稍后想要较小的文件,你可以将 -9 传递给 gzip