mmap和gzip可以协作吗?

mab*_*mab 8 python gzip mmap

我正在尝试使用gzip压缩文件来使用mmap.这甚至可能吗?

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)

输出数据被压缩.

Jos*_*hua 12

好吧,不是你想要的方式.

如果压缩数据是您想要的,则可以使用mmap()来访问gzip压缩文件.

mmap()是一个系统调用,用于将磁盘块映射到RAM,就像添加swap一样.

您无法使用mmap()将未压缩的数据映射到RAM中,因为它不在磁盘上.


nop*_*per 12

你可以做得很轻松.实际上,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()
Run Code Online (Sandbox Code Playgroud)

这同样适用于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()
Run Code Online (Sandbox Code Playgroud)