← retour aux snippets

zipfile: créer et extraire une archive

Compresser quelques fichiers et les extraire proprement.

python compression #zip#archive#io

objectif

Compresser quelques fichiers et les extraire proprement.

code minimal

from zipfile import ZipFile, ZIP_DEFLATED
from tempfile import TemporaryDirectory
from pathlib import Path

with TemporaryDirectory() as tmp:
    root = Path(tmp)
    (root / "a.txt").write_text("A\n", encoding="utf-8")
    (root / "b.txt").write_text("B\n", encoding="utf-8")
    zip_path = root / "files.zip"
    with ZipFile(zip_path, "w", ZIP_DEFLATED) as z:
        z.write(root / "a.txt", arcname="a.txt")
        z.write(root / "b.txt", arcname="b.txt")
    with ZipFile(zip_path) as z:
        z.extractall(root / "out")
    print((root / "out" / "a.txt").read_text().strip())  # attendu: A

utilisation

from zipfile import ZipFile
import io
buf = io.BytesIO()
with ZipFile(buf, "w") as z: pass
print(buf.getbuffer().nbytes >= 22)  # ZIP minimal

variante(s) utile(s)

from zipfile import ZipFile, ZIP_STORED
from io import BytesIO
mem = BytesIO()
with ZipFile(mem, "w", compression=ZIP_STORED) as z:
    z.writestr("x.txt", "hello")
print(mem.getbuffer().nbytes > 0)

notes

  • ZIP_DEFLATED compresse; ZIP_STORED garde en clair.
  • Évitez d’extraire des chemins suspects (path traversal) non vérifiés.