web-dev-qa-db-ja.com

python:一時的に解凍せずにZipからファイルを開きます

最初に解凍せずにZipアーカイブからファイルを開くにはどうすればよいですか?

私はpygameを使用しています。ディスク容量を節約するために、すべてのイメージを圧縮しています。 Zipファイルから特定の画像を直接読み込むことはできますか?例:pygame.image.load('zipFile/img_01')

56
user2880847

Vincent Povirkの答えは完全には機能しません。

import zipfile
archive = zipfile.ZipFile('images.Zip', 'r')
imgfile = archive.open('img_01.png')
...

以下で変更する必要があります。

import zipfile
archive = zipfile.ZipFile('images.Zip', 'r')
imgdata = archive.read('img_01.png')
...

詳細については、ZipFile docs here を参照してください。

73
Jellema
import io, pygame, zipfile
archive = zipfile.ZipFile('images.Zip', 'r')

# read bytes from archive
img_data = archive.read('img_01.png')

# create a pygame-compatible file-like object from the bytes
bytes_io = io.BytesIO(img_data)

img = pygame.image.load(bytes_io)

私は今これを自分で理解しようとしており、これは将来この質問に出くわす人にとって役に立つかもしれないと思っていました。

16
Brandon

理論的には、はい、プラグインするだけです。Zipfileは、Zipアーカイブ内のファイルにファイルのようなオブジェクトを与えることができ、image.loadはファイルのようなオブジェクトを受け入れます。したがって、次のようなものが機能するはずです。

import zipfile
archive = zipfile.ZipFile('images.Zip', 'r')
imgfile = archive.open('img_01.png')
try:
    image = pygame.image.load(imgfile, 'img_01.png')
finally:
    imgfile.close()
6
Vincent Povirk