Python: Open file in zip without temporarily extracting it

后端 未结 3 907
孤独总比滥情好
孤独总比滥情好 2020-11-27 14:32

How can I open files in a zip archive without extracting them first?

I\'m using pygame. To save disk space, I have all the images zipped up. Is it possible to load a

相关标签:
3条回答
  • 2020-11-27 15:12

    In theory, yes, it's just a matter of plugging things in. Zipfile can give you a file-like object for a file in a zip archive, and image.load will accept a file-like object. So something like this should work:

    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()
    
    0 讨论(0)
  • 2020-11-27 15:36
    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)
    

    I was trying to figure this out for myself just now and thought this might be useful for anyone who comes across this question in the future.

    0 讨论(0)
  • 2020-11-27 15:39

    Vincent Povirk's answer won't work completely;

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

    You have to change it in:

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

    For details read the ZipFile docs here.

    0 讨论(0)
提交回复
热议问题