最初にファイルを抽出せずにzipアーカイブ内のファイルを開くにはどうすればよいですか?
私はpygameを使用しています。ディスク容量を節約するために、すべての画像を圧縮しました。特定の画像をzipファイルから直接ロードすることは可能ですか?例えば:
pygame.image.load('zipFile/img_01')
最初にファイルを抽出せずにzipアーカイブ内のファイルを開くにはどうすればよいですか?
私はpygameを使用しています。ディスク容量を節約するために、すべての画像を圧縮しました。特定の画像をzipファイルから直接ロードすることは可能ですか?例えば:
pygame.image.load('zipFile/img_01')
回答:
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)
私はちょうど今これを自分で理解しようとしていて、これは将来この質問に出くわす人にとって役立つかもしれないと思いました。
理論的には、はい、プラグインするだけです。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()