2008-09-26 30 views

Répondre

81

Pour Python 2.x, utilisez le module StringIO. Par exemple:

>>> from cStringIO import StringIO 
>>> f = StringIO('foo') 
>>> f.read() 
'foo' 

J'utilise cStringIO (ce qui est plus rapide), mais notez qu'il ne accept Unicode strings that cannot be encoded as plain ASCII strings. (Vous pouvez passer à StringIO en remplaçant "de cStringIO" par "de StringIO".)

Pour Python 3.x, utilisez le module io.

f = io.StringIO('foo') 
+1

Il y a une raison maintenant d'utiliser cStringIO: cStringIO ne supporte pas les chaînes unicode. –

+3

Je pense qu'une meilleure idée est de faire 'import cStringIO as StringIO'. De cette façon, si vous avez besoin de passer à l'implémentation python pure pour une raison quelconque, vous n'avez besoin de changer qu'une seule ligne. –

+0

Cela fonctionne aussi pour Python2.7: 'io.StringIO (u'foo ')' Je l'utiliserais – guettli

22

En Python 3.0:

import io 

with io.StringIO() as f: 
    f.write('abcdef') 
    print('gh', file=f) 
    f.seek(0) 
    print(f.read()) 
+0

@ABB la réponse acceptée montre déjà un tel usage. Ma réponse est complémentaire: elle montre 'with'-statement et écrit, imprime, cherche, lit des méthodes. – jfs

2

Deux bonnes réponses. Je rajouterais un petit truc - si vous avez besoin d'un objet réel de fichiers (certaines méthodes attendent, pas seulement une interface), voici un moyen de créer un adaptateur:

+0

"Page non trouvée" - http://www.rfk.id.au/software/projects/filelike/api/filelike.htm – jfs

+0

Quelle honte. Impossible de trouver l'original ... –

+1

Semble être de retour maintenant (7 ans plus tard;) –

1

Cette fonctionne pour python2.7 et Python3.x:

io.StringIO(u'foo')