En savoir plus sur TextIOWrapper
class dans la documentation du module io
:
un flux de texte sur un tampon BufferedIOBase
binary stream.
Modifier: utiliser la fonction seek
:
seek(offset[, whence])
Modifier la position de l'octet courant de décalage donné. offset
est interprété par rapport à la position indiquée par whence
. La valeur par défaut pour whence
est SEEK_SET
. Les valeurs de whence
sont:
SEEK_SET
ou 0 - début du flux (par défaut); le décalage doit être nul ou positif
SEEK_CUR
ou 1 - position du courant; le décalage peut être négatif
SEEK_END
ou l'extrémité 2 du flux; le décalage est généralement négatif
Renvoie la nouvelle position absolue.
Nouveauté de la version 3.1: Les constantes SEEK_*
.
Nouveauté de la version 3.3: Certains systèmes d'exploitation pouvaient prendre en charge des valeurs supplémentaires , telles que os.SEEK_HOLE
ou os.SEEK_DATA
. Les valeurs valides pour un fichier peuvent dépendre de son ouverture en mode texte ou binaire.
Effectuez les opérations suivantes ont formulé des commentaires extrait de code:
import io, os
output = io.BytesIO()
wrapper = io.TextIOWrapper(
output,
encoding='cp1252',
# errors=None, # defalut
# newline=None, # defalut
line_buffering=True,
# write_through=False # defalut
)
wrapper.write('Text1\n')
wrapper.write('Text2\n')
wrapper.write('Text3\n')
# wrapper.flush() # If line_buffering is True, flush() is implied
## when a call to write contains a newline character.
wrapper.seek(0,0) # start of the stream
for line in wrapper.readlines():
print(line)
Le reste de ma réponse originale:
print(output.getvalue()) # for gebugging purposes
print(wrapper.write('Text4\n')) # for gebugging purposes
# for line in wrapper.read():
for line in output.getvalue().decode('cp1252').split(os.linesep):
print(line)
Sortie:
==> D:\test\Python\q44702487.py
b'Text1\r\nText2\r\nText3\r\n'
6
Text1
Text2
Text3
Text4
==>
Oui la nouvelle réponse a fonctionné. Il me semble qu'il me manquait l'appel 'wrapper.seek (0,0)' pour démarrer le flux. – EliSquared