Dans Python 2.x avec un objet "semblable à un fichier":
sys.stdout.write(bytes_)
tempfile.TemporaryFile().write(bytes_)
open('filename', 'wb').write(bytes_)
StringIO().write(bytes_)
Comment faire de même dans Python 3?
Comment écrire l'équivalent de ce code Python 2.x:
def write(file_, bytes_):
file_.write(bytes_)
Remarque: sys.stdout
n'est pas toujours sémantiquement un flux de texte. Il peut être avantageux de le considérer parfois comme un flux d'octets. Par exemple, créer une archive chiffrée de dir/sur la machine distante :
tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
Il est inutile d'utiliser Unicode dans ce cas.
Il s'agit d'utiliser des API qui fonctionnent sur des octets plutôt que sur des chaînes.
sys.stdout.buffer.write(bytes_)
Comme l'explique docs , vous pouvez également detach
les flux, ils sont donc binaires par défaut.
Cela accède au tampon d'octets sous-jacent.
tempfile.TemporaryFile().write(bytes_)
Il s'agit déjà d'une API d'octets.
open('filename', 'wb').write(bytes_)
Comme vous pouvez vous y attendre du "b", il s'agit d'une API d'octets.
from io import BytesIO
BytesIO().write(bytes_)
BytesIO
est l'équivalent en octets de StringIO
.
EDIT: write
fonctionnera simplement sur n'importe quel objet de type fichier binaire . La solution générale consiste donc simplement à trouver la bonne API.
Spécifiez le mode binaire, "b", lorsque vous ouvrez votre fichier:
with open('myfile.txt', 'wb') as w:
w.write(bytes)