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.