13
a.zip---
      -- b.txt
      -- c.txt
      -- d.txt

Methods to process the zip files with Python,

I could expand the zip file to a temporary directory, then process each txt file one bye one

Here, I am more interested to know whether or not python provides such a way so that I don't have to manually expand the zip file and just simply treat the zip file as a specialized folder and process each txt accordingly.

3

2 Answers 2

33

The Python standard library helps you.

Doug Hellman writes very informative posts about selected modules: https://pymotw.com/3/zipfile/

To comment on Davids post: From Python 2.7 on the Zipfile object provides a context manager, so the recommended way would be:

import zipfile
with zipfile.ZipFile("zipfile.zip", "r") as f:
    for name in f.namelist():
        data = f.read(name)
        print name, len(data), repr(data[:10])

The close method will be called automatically because of the with statement. This is especially important if you write to the file.

Sign up to request clarification or add additional context in comments.

1 Comment

The with construction worked for me every time, then suddenly in JupyterLab I was having an issue where it refused to close the file automatically. Turns out I had to do anything outside of the with context (within the same cell) to force it to acknowledge I wanted the file closed. Adding print('Done') was enough. Just in case anyone is in the same boat.
7

Yes you can process each file by itself. Take a look at the tutorial here. For your needs you can do something like this example from that tutorial:

import zipfile
file = zipfile.ZipFile("zipfile.zip", "r")
for name in file.namelist():
    data = file.read(name)
    print name, len(data), repr(data[:10])

This will iterate over each file in the archive and print out its name, length and the first 10 bytes.

The comprehensive reference documentation is here.

1 Comment

using file as a variable name conflicts with the builtin file type.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.