StringIO e cStringIO - Lavorare con i buffer di testo usando le API tipo file

Scopo Lavorare con i buffer di testo usando le API tipo file
Versione Python StringIO: 1.4, cStringIO: 1.5

La classe StringIO fornisce comodi strumenti per lavorare con del testo in memoria usando le API di file (read, write, ecc.). Ci sono due implementazioni distinte. Il modulo cStringIO è scritto in C per privilegiare la velocità, mentre il modulo StringIO è scritto in Python per privilegiare la portabilità. L'uso di cStringIO per costruire grandi stringhe può offrire un risparmio nelle prestazioni rispetto ad altre tecniche di concatenazione di stringhe.

Esempio

Ecco alcuni semplici esempi standard circa l'uso dei buffer di StringIO:

# Trovare la miglior implementazione disponibile su questa piattaforma
try:
	from cStringIO import StringIO
except:
	from StringIO import StringIO

# Scrivere in un buffer
output = StringIO()
output.write('Questo va nel buffer. ')
print >>output, 'Ed anche questo.'

# Recuperare i valori scritti
print output.getvalue()

output.close() # scaricare il buffer dalla memoria

# Iniizializzare un buffer per la lettura
input = StringIO('Valore iniziale per il buffer in lettura')

# Leggere dal buffer
print input.read()

Questo esempio usa read(), ma naturalmente sono disponibili anche i metodi readline() e readlines(). La classe StringIO fornisce anche un metodo seek() così che sia possibile spostarsi all'interno del buffer mentre si sta leggendo, la qual cosa può essere utile per risalire il buffer se si sta usando una qualche forma di algoritmo di parsing look-ahead.

Le applicazioni nel mondo reale di StringIO includono uno stack di una applicazione web dove le varie parti dello stack possono aggiungere testo alla risposta, oppure il testare il risultato generato da parti di un programma che tipicamente scrivono in un file.

L'applicazione che stiamo realizzando al lavoro comprende una interfaccia allo shell scripting nella forma di parecchi programmi da riga comando. Alcuni di questi programmi sono responsabili del recupero di dati dal database e dello scarico sulla console (sia per mostrarlo all'utente, oppure affinchè il testo possa servire come input per un altro comando). I comandi condividono un insieme di plugin di formattazione per produrre una rappresentazione testuale di un oggetto in svariati modi (XML, sintassi bash, leggibili, ecc). Visto che i formattatori in genere scrivono sullo standard output, il test dei risulati risulterebbe un tantino complicato senza il modulo StringIO. L'uso di StringIO per intercettare l'output del formattatore fornisce un facile modo per raccogliere l'output in memoria per confrontarlo con i risultati che ci si aspetta.

Vedere anche:

StringIO
La documentazione standard della libreria per questo modulo
Il modulo StringIO ::: www.effbot.org
Gli esempi di effbot con StringIO
Efficiente concatenazione di stringhe in Python
Esamina diversi metodi per combinare le stringhe ed i loro relativi pregi.