- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 python 模块 gzip 压缩文件,然后使用 hashlib 散列 gzip 文件。我有以下代码:
import hashlib
import gzip
f_name = 'read_x.fastq'
for x in range(0,3):
file = open(f_name, 'rb')
myzip = gzip.open('test.gz', 'wb', compresslevel=1)
n = 100000000
thử:
print 'zipping ' + str(x)
for chunk in iter(lambda: file.read(n), ''):
myzip.write(chunk)
Cuối cùng:
file.close()
myzip.close()
md5 = hashlib.md5()
print 'hashing ' + str(x)
with open('test.gz', 'r') as f:
for chunk in iter(lambda: f.read(n), ''):
md5.update(chunk)
print md5.hexdigest()
print '\n'
我认为应该简单地压缩文件、散列它并连续三次显示相同的输出散列。但是,我得到的输出是:
zipping 0
hashing 0
7bd80798bce074c65928e0cf9d66cae4
zipping 1
hashing 1
a3bd4e126e0a156c5d86df75baffc294
zipping 2
hashing 2
85812a39f388c388cb25a35c4fac87bf
如果我省略了 gzip 这一步,而只是连续三次对同一个 gzip 文件进行哈希处理,我确实得到了三次相同的输出:
hashing 0
ccfddd10c8fd1140db0b218124e7e9d3
hashing 1
ccfddd10c8fd1140db0b218124e7e9d3
hashing 2
ccfddd10c8fd1140db0b218124e7e9d3
谁能解释一下这是怎么回事?问题一定是 gzip 过程每次都不同。但据我所知,DEFLATE 算法是霍夫曼编码后跟 LZ77(游程编码的一种形式)或 LZ77 后跟霍夫曼,因此给定相同的输入应该产生相同的输出。
câu trả lời hay nhất
压缩完全相同的内容会产生不同的 gzip 输出有几个原因:
所以这里有一段代码演示了从 python gzip 获得可重现输出的错误和正确方法:
import hashlib
import gzip
f_name = '/etc/passwd'
output_template = '/tmp/test{}.gz'
def digest(filename: str) -> str:
md5 = hashlib.md5()
with open(output_filename, 'rb') as f:
for chunk in iter(lambda: f.read(block_size), b''):
md5.update(chunk)
return md5.hexdigest()
print("The default way - non identical outputs")
for x in range(0,3):
input_handle = open(f_name, 'rb')
output_filename = output_template.format(x)
myzip = gzip.open(output_filename, 'wb')
block_size = 4096
thử:
for chunk in iter(lambda: input_handle.read(block_size), b''):
myzip.write(chunk)
Cuối cùng:
input_handle.close()
myzip.close()
print(digest(output_filename))
print("The right way to get identical outputs")
for x in range(3,6):
input_handle = open(f_name, 'rb')
output_filename = output_template.format(x)
myzip = gzip.GzipFile(
filename='', # do not emit filename into the output gzip file
mode='wb',
fileobj=open(output_filename, 'wb'),
mtime=0,
)
block_size = 4096
thử:
for chunk in iter(lambda: input_handle.read(block_size), b''):
myzip.write(chunk)
Cuối cùng:
input_handle.close()
myzip.close()
print(digest(output_filename))
关于相同 gzip 文件的 Python md5 哈希值不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28213912/
我正在尝试创建有效的 gzip 文件(可以使用标准 Linux gzip 解压缩),其中的数据使用 DEFLATE 算法和静态/预设字典编码。 我已阅读 DEFLATE 的两个规范和 gzip ,而且
我刚刚搜索了gzip和 Deflate ,并发现 Deflate 更好。 GZip or Deflate for HTTP compression Why use deflate instead of
Đã đóng cửa. Câu hỏi này không tuân thủ nguyên tắc Stack Overflow. Câu trả lời không được chấp nhận vào thời điểm này. Các câu hỏi yêu cầu mã phải thể hiện sự hiểu biết tối thiểu về vấn đề đang được giải quyết. Bao gồm các giải pháp đã thử, lý do chúng không hiệu quả và kết quả mong đợi
我一直在寻找 Gzip 是否支持多部分文件压缩。 From what I have seen so far it does not, but how come 7z allows multipart
我可以连接两个已经 gzip 的文件(使用 gzip)然后用枪压缩它们吗? 截至今天,我从远程服务器下载 gzip 压缩文件,单独对其进行 gunzip,然后将它们合并。 希望通过合并 gzipped
我正在创建两个 gzip 文件,一个只包含一个 gzip 成员,而第二个包含 2 个 gzip 成员(两个文件连接成一个 gzip 文件)。 当我尝试通过网络服务器下载此文件时,chrome 会很好地
当我对文件夹进行去皮重和 gzip 压缩时,每次我都会得到不同的文件大小。 目录内容不变,没有变化。压缩后的文件大小变化 20 到 100 字节。这是正常行为吗? 我的数据会受到影响吗? 谢谢 最佳答
比方说 file.txt.gz有 2GB,我想看到最后 100 行左右。 zcat
我一直听说对您的网站进行 gzip 压缩是加快交付速度的良好做法。我的网站总体负载非常大,我还应该研究 gzip 吗?我还了解了使用 gzip 的缺点,例如解压缩内容以便浏览器显示所需的时间。这是真的
下载 jQuery 的生产副本时,链接旁边显示该文件为 32K Minified & Gzipped。我得到了 Minified,但是 Gzipped 是什么意思? 它是否被网络服务器压缩,如 Apa
我的网站很高兴根据以下内容进行 Gzip 压缩: http://www.gidnetwork.com/tools/gzip-test.php 但是,当我通过 Yslow 运行它时,我得到了 Gzip
我使用命令 tar 一组文件:tar -czvf file.tar.gz file/ 然后复制到 USB(ext4 格式),我检查了我可以解压它。重装系统后,挂载usb时发生了一些错误,我执行fsck
我有一个提供小部件的网络服务。为了可扩展性,我想在 Amazon S3 上保留 js 文件的 gzip 版本。问题是不能接受 gzip 文件的浏览器将不会被提供。 任何人都知道我在哪里可以找到统计数据
我正在使用 Chrome 和 Firefox 下的 Yslow 工具查看我的开发站点,其中一项建议是我对适当的内容进行 gzip。作为起点,我刚刚在我的 [/] 配置中添加了“tools.gzip.o
我正在开发一个网站,我正在使用 gzip.exe 来预压缩 css 和 js 文件(只有 1 个 css 文件从 4.53 KB 到 1.50 KB,还有一个 js 文件包含 jquery 和一些来自
我们必须使用什么类型的响应监听器来处理 Android Volley 的 gzip 响应? 如果使用 String 监听器,则响应似乎会丢失其编码。 你如何使用 Volley 处理 gzip 响应?
我用 Fiddler调试我的应用程序。每当响应被服务器压缩,而不是解压缩响应时,Fiddler 显示不可读的二进制数据: /* Response to my request (POST) */ HTT
我通常使用tar zcvf压缩并使用tar zxvf解压缩(由于习惯使用gzip)。 我最近购买了一个具有超线程功能的四核 CPU,因此我有 8 个逻辑核心,并且我注意到许多核心在压缩/解压缩期间未使
我正在使用 Google Cloud Storage 控制台上传文件。我没有使用任何命令行工具。 我想在元数据中将 Content-Encoding 设置为 gzip(-z 选项)。 请看下面的截图,
我正在将mysqldump的结果用管道传输到gzip,gzip的速度似乎大大落后 gzip: 34.9MiB 0:01:54 [ 218kiB/s] mysqldump: 735MiB 0:01:5
Tôi là một lập trình viên xuất sắc, rất giỏi!