2011-02-26 1 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 번호 없을 것 같습니다 :

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 파일에 적용된다. 어쩌면 파이썬이나 루비? –

+0

@uwe, 가져 오기 구문 및 그 라이브러리 함수는 파이썬입니다. – tobyodavies

+0

고마워요, @tobyodavies, 태그를 추가했습니다. –

답변

12

음, 원하는 방식이 아닙니다.

압축 된 데이터가 원하는 경우 mmap()을 사용하여 gzipped 파일에 액세스 할 수 있습니다.

mmap()은 마치 스왑을 추가하는 것처럼 디스크 블록을 RAM에 매핑하기위한 시스템 호출입니다.

mmap()이 디스크에 없으므로 압축되지 않은 데이터를 RAM에 매핑 할 수 없습니다.

12

당신은 쉽게 할 수 있습니다. 실제로 gzip 모듈은 선택적 인수로 파일과 같은 객체를 얻습니다. '라인의 끝에서 누락 상기'이후

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