104

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

私はパイゲームを使用しています。ディスク容量を節約するために、すべての画像を圧縮しました。特定のイメージを zip ファイルから直接ロードすることは可能ですか? 例えば: pygame.image.load('zipFile/img_01')

4

4 に答える 4

142

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のドキュメントを参照してください。

于 2013-10-15T01:52:20.583 に答える
30
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)

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

于 2014-01-27T17:26:02.980 に答える
1

Python 3.2 以降ではZipFile、 をコンテキスト マネージャとして使用できます。

from zipfile import ZipFile

with ZipFile('images.zip') as zf:
    for file in zf.namelist():
        if not file.endswith('.png'): # optional filtering by filetype
            continue
        with zf.open(file) as f:
            image = pygame.image.load(f, namehint=file)

  • コンテキスト マネージャー (withステートメント) を使用する利点は、ファイルが自動的に適切に閉じられることです。
  • は、組み込みのopen()を使用したときに得られるf通常のファイル オブジェクトのように使用できます。

ドキュメントへのリンク

于 2022-01-14T17:14:29.040 に答える