2011-02-26 48 views
7

我想弄清楚如何將mmap與gzip壓縮文件結合使用。這甚至有可能嗎?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) 

輸出數據被壓縮。

+0

似乎沒有C++或C#,由於';'在該行的末尾丟失。也許Python或Ruby? – 2011-02-26 16:03:54

+0

@uwe,導入語法和那些庫函數是python – tobyodavies 2011-02-26 16:07:24

+0

謝謝,@tobyodavies,我已經添加了標籤。 – 2011-02-26 16:20:31

回答

12

嗯,不是你想要的樣子。

如果壓縮數據是你想要的,mmap()可以用來訪問gzip文件。

mmap()是一種系統調用,用於將磁盤塊映射到RAM中,就像添加交換一樣。

不能將未壓縮的數據映射到mmap()中的RAM,因爲它不在磁盤上。

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() 

這同樣適用於tar文件模塊:

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() 
相關問題