Search code examples
pythonzipstringio

Extract zip to memory, parse contents


I want to read the contents of a zip file into memory rather than extracting them to disc, find a particular file in the archive, open the file and extract a line from it.

Can a StringIO instance be opened and parsed? Suggestions? Thanks in advance.

zfile = ZipFile('name.zip', 'r')

    for name in zfile.namelist():
        if fnmatch.fnmatch(name, '*_readme.xml'):
            name = StringIO.StringIO()
            print name # prints StringIO instances
            open(name, 'r')  # IO Error: No such file or directory...

I found a few similar posts, but none that seem to address this issue: Extracting a zipfile to memory?


Solution

  • Thank you to everyone that contributed solutions. This is what ended up working for me:

    zfile = ZipFile('name.zip', 'r')
    
            for name in zfile.namelist():
                if fnmatch.fnmatch(name, '*_readme.xml'):
                    zopen = zfile.open(name)
                    for line in zopen:
                        if re.match('(.*)<foo>(.*)</foo>(.*)', line):
                            print line