【发布时间】:2011-11-28 21:54:26
【问题描述】:
我需要弄清楚如何在Python中将文件输出写入压缩文件,类似于下面的两行:
open ZIPPED, "| gzip -c > zipped.gz";
print ZIPPED "Hello world\n";
在 Perl 中,这使用 Unix gzip 将您打印到 ZIPPED 文件句柄的任何内容压缩到文件“zipped.gz”。
我知道如何在 Python 中使用“import gzip”来执行此操作,如下所示:
import gzip
zipped = gzip.open("zipped.gz", 'wb')
zipped.write("Hello world\n")
但是,这非常慢。根据分析器的说法,使用该方法占用了我 90% 的运行时间,因为我正在将 200GB 的未压缩数据写入各种输出文件。我知道文件系统可能是这里问题的一部分,但我想通过使用 Unix/Linux 压缩来排除它。这部分是因为我听说使用同一个模块解压缩也很慢。
【问题讨论】:
-
您是否需要在纯 Python 中完成它,或者您是否可以满足于调用文件系统上的二进制文件(在 Python 中,您会使用 subprocess 模块)?
-
我不想在 Python 中这样做,因为纯 Python 方法太慢了。
-
您是否在 200GB 未压缩数据上从 shell 运行 gzip 程序?我预计在 90-100% 的 CPU 利用率下会花费相当多的挂钟时间 - 在我的 Windows 机器上,它每 GB 运行大约 1 分钟,而 Python gzip 模块每 GB 大约需要 2 分钟。
-
戴夫,是的,这是我追求的 2 分钟和 1 分钟之间的差异。
标签: python gzip pipe compression filehandle