Utilisation de la version Python2.7. Voici mon exemple de code.
import StringIO
import sys
buff = StringIO.StringIO()
buff.write("hello")
print buff.read()
dans le programme ci-dessus, read () ne me renvoie rien alors que getvalue () me renvoie "bonjour". Quelqu'un peut-il m'aider à résoudre le problème? J'ai besoin de read () car mon code suivant implique la lecture de "n" octets.
Vous devez réinitialiser la position du tampon au début. Vous pouvez le faire en faisant buff.seek(0)
.
Chaque fois que vous lisez ou écrivez dans le tampon, la position est avancée d'une unité. Disons que vous commencez avec un tampon vide.
La valeur du tampon est ""
, La position du tampon est 0
. Vous faites buff.write("hello")
. De toute évidence, la valeur du tampon est désormais hello
. Cependant, la position du tampon est maintenant 5
. Lorsque vous appelez read()
, il n'y a rien après la position 5 à lire! Il renvoie donc une chaîne vide.
In [38]: out_2 = StringIO.StringIO('not use write') # be initialized to an existing string by passing the string to the constructor
In [39]: out_2.getvalue()
Out[39]: 'not use write'
In [40]: out_2.read()
Out[40]: 'not use write'
ou
In [5]: out = StringIO.StringIO()
In [6]: out.write('use write')
In [8]: out.seek(0)
In [9]: out.read()
Out[9]: 'use write'