Vladoski
Vladoski

Reputation: 327

Python zipfile extract files from directory inside a zip file

I need to extract some files inside a directory in a zip file.

The main problem is that I want to extract only the contents from this directory, not the directory itself with all the files inside.

I've tried by iterating on them using namelist() or tweaking it with zipfile.Path(), unsuccessfully.

This works but it extracts the directory with the files (like extractall() does). Path doesn't work because raises KeyError saying that the item doesn't exist yet it does.

for zip_file in zip_files:
    with zipfile.ZipFile(os.path.join(home_path, zip_file), 'r') as zip_ref:
        files = [n for n in zip_ref.namelist()]
        zip_ref.extractall(os.path.join(home_path, 'dir'), members=files)

Upvotes: 1

Views: 1490

Answers (1)

Bobby Donchev
Bobby Donchev

Reputation: 385

written from my mobile but I expect it to work:

from pathlib import Path

with ZipFile(zipfile_path, "r") as zf:
            for f in zf.namelist():
                if f.startswith('/'):
                    continue
                
                source = zf.open(f)
                target = open(target_dir / Path(f).name, "wb")

                with source, target:
                    shutil.copyfileobj(source, target)

Upvotes: 1

Related Questions