Spezzare stringhe in Python (con i generatori)

Pubblicato: 8 gennaio 2010 in Python
Tag:

Intanto che scaricavo via Bittorrent tutta Internet mi stavo chiedendo come fa il (lato) server a spezzettare in parti uguali il file che poi viene servito, non è una domanda filosofica del tipo “ma come farà mai…”, no no per un’esigenza volevo proprio vedere del codice Python che prendesse uno stringone e lo facesse a brandelli. Non lo so, ho perso circa dieci secondi a guardare il codice e non l’ho trovato (se qualcuno lo sa è pregato di metterlo nei commenti).

Nel frattempo però mi sono inventato un sistema all’uopo che usa ancora i generatori.

Problema: data una stringa arbitraria ed una dimensione spezzare la stringa in pezzi di quella dimensione (tranne eventualmente l’ultimo).

def schunk(str, size):
	left = str[:size] # Il primo pezzo
	right = str[size:] # Il resto della stringa
	yield left 
	while len(right) > size:
		left = right[:size] # Il primo pezzo del pezzo successivo
		right = right[size:] # Il resto del pezzo successivo
		yield left
	if len(right) > 0: # L'ultimo pezzo
		yield right

un esempio di utilizzo può quindi essere:

a = "iosoncontadinellaallacampagnabellasefossiunareginasareiincoronatamasoncontadinellamitoccalavorar"
for i in schunk(a, 10): # Formo pezzi lunghi dieci
	print i
# Oppure
spezzatino = [sp for sp in schunk(a, 10)]
print spezzatino
Advertisements

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...