← retour aux snippets

shutil.copyfileobj: copier des flux efficacement

Copier d'un fichier/flux à un autre avec un buffer contrôlé.

python filesystem #shutil#stream#copy

objectif

Copier d’un fichier/flux à un autre avec un buffer contrôlé.

code minimal

import io, shutil
src = io.BytesIO(b"abc"); dst = io.BytesIO()
shutil.copyfileobj(src, dst, length=2)
print(dst.getvalue().startswith(b"ab"))  # attendu: True

utilisation

import shutil, tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
    p = pathlib.Path(tmp)/"a"; q = pathlib.Path(tmp)/"b"
    p.write_bytes(b"x"*10)
    with p.open("rb") as fsrc, q.open("wb") as fdst:
        shutil.copyfileobj(fsrc, fdst, length=4)
    print(q.read_bytes() == b"x"*10)

variante(s) utile(s)

import io, shutil
s = io.BytesIO(b"0123456789"); d = io.BytesIO()
shutil.copyfileobj(s, d)
print(len(d.getvalue()) == 10)

notes

  • Contrôlez length pour limiter la mémoire tampon.
  • Idéal pour chaîner des objets fichier/Socket en mode binaire.