python - mmap 和 gzip 可以协作吗?

标签 python gzip mmap

我正在尝试弄清楚如何将 mmap 与 gzip 压缩文件一起使用。这可能吗?

import mmap
import os
import gzip

filename = r'C:\temp\data.gz'

file = gzip.open(filename, "rb+")
size = os.path.getsize(filename)

file = mmap.mmap(file.fileno(), size)

print file.read(8)

输出数据被压缩。

最佳答案

你可以轻松做到。事实上,gzip 模块将一个类似文件的对象作为可选参数。

import mmap
import gzip

filename = "a.gz"
handle = open(filename, "rb")
mapped = mmap.mmap(handle.fileno(), 0, access=mmap.ACCESS_READ)
gzfile = gzip.GzipFile(mode="r", fileobj=mapped)

print gzfile.read()

这同样适用于 tarfile 模块:

import sys
import mmap
import tarfile

f = open(sys.argv[1], 'rb')
fo = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
tf = tarfile.open(mode='r:gz', fileobj=fo)

print tf.getnames()

关于python - mmap 和 gzip 可以协作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5127921/

相关文章:

java - java 中的 mapreduce - gzip 输入文件

c - 通过使用 mmap() 在进程之间共享内存

c - Linux mmap() 错误

python - 使用关键字参数 'plan_edit' pk' : '{' '' palan/edit$'] 反转 }' not found. 1 pattern(s) tried: ['

python - 如何使用 Mechanize 抓取 HP 打印机状态页?

iis - IIS 的最佳 GZIP 压缩设置是什么?

c - 为什么当偏移量为非负数(但是是 sysconf(_SC_PAGE_SIZE) 的倍数)时 mmap 会因 EINVAL 而失败?

python - 预分配多个形状相同的 numpy 数组

python - 如何使用带有 pyodbc 的 cursor.fetchall 从数据库中的行创建列表?

python - 使用 python 在 Heroku 上启用压缩