gpt4 book ai didi

python - 如何确定 Python 中 gzip 文件的内容长度?

转载 作者:行者123 更新时间:2023-11-28 16:37:16 31 4
gpt4 key购买 nike

我有一个很大的压缩文件,我想在不解压缩的情况下知道内容的大小。我试过这个:

import gzip
import os

with gzip.open(data_file) as f:
f.seek(0, os.SEEK_END)
size = f.tell()

但是我得到了这个错误

ValueError: Seek from end not supported 

我该怎么做?

谢谢。

最佳答案

原则上不可能在不解压缩 gzip 文件的情况下明确确定未压缩数据的大小。您不需要空间来存储未压缩的数据——您可以随手丢弃它。但是你必须全部解压。

如果您控制 gzip 文件的源并且可以确保 a) gzip 文件中没有连接的成员,b) 未压缩数据的长度小于 4 GB,并且 c) 在gzip 文件的末尾,然后并且只有那时您可以读取 gzip 文件的最后四个字节以获得具有未压缩数据长度的小端整数。

参见 this answer了解更多详情。

这是读取 gzip 文件并打印未压缩长度的 Python 代码,无需存储或保存未压缩数据。它将内存使用限制为小缓冲区。这需要 Python 3.3 或更高版本:

#!/usr/local/bin/python3.4
import sys
import zlib
import warnings
f = open(sys.argv[1], "rb")
total = 0
buf = f.read(1024)
while True: # loop through concatenated gzip streams
z = zlib.decompressobj(15+16)
while True: # loop through one gzip stream
while True: # go through all output from one input buffer
total += len(z.decompress(buf, 4096))
buf = z.unconsumed_tail
if buf == b"":
break
if z.eof:
break # end of a gzip stream found
buf = f.read(1024)
if buf == b"":
warnings.warn("incomplete gzip stream")
break
buf = z.unused_data
z = None
if buf == b"":
buf == f.read(1024)
if buf == b"":
break
print(total)

关于python - 如何确定 Python 中 gzip 文件的内容长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332295/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com