web-dev-qa-db-fra.com

Impossible d'obtenir des données sur l'utilisation de read () de StringIO dans python

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.

64
raj

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.

90
Joel Cornett
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'
19
Vincent Lee