PDA

Visualizza la versione completa : Linguaggio Python - Stringhe


frufru
25-11-2013, 11:13
Ciao a tutti! Ho un problema sulla comprensione di questo codice.
Richiesta: "Scrivere una funzione modificaCase(fin, fout) che copia il file di ingresso fin nel file di uscita fout, contando tutte le occorrenze di casa che diventano casa1, casa2, casa 3"
Quindi avendo un file di ingresso fin:
ciao
come
stai
casa
tutto
casa
Il file di uscita fout dovr essere:
ciao
come
stai
casa1
tutto
casa2

Il codice il seguente, e funziona perfettamente:



import re
def modificaCase(file_in,file_out):
p=open(file_in, "r", encoding="utf-8").read()
fout=open(file_out,"w",encoding="utf-8")
i=1
while re.search('\Wcasa\W',p):
print(i)
s=re.search('\Wcasa\W',p)
p=p[:s.start()+5]+str(i)+p[s.start()+5:len(p)]
i=i+1
print(p,file=fout)
fout.close()


Quello che non riesco a capire la riga di codice:


p=p[:s.start()+5]+str(i)+p[s.start()+5:len(p)]


Chi cos gentile da spiegarmela passo passo?
Grazie :)

WeirdOmen
08-12-2013, 03:24
Ciao! :)

Quella riga modifica la variabile p facendola riferire ad un nuovo oggetto (stringa) costruito cos:
1) La stringa comincia con:
p[:s.start() +5] #ovvero uno slice della stringa p: questo slice include la sub-stringa che va dall'inizio fino all'incontro del pattern definito in re.search + 5 caratteri, ovvero '\Wcasa\W' (cio la parola "casa" tra due caratteri non alfanumerici).
2) poi ci aggiunge
str(i) #ovvero il numero intero a cui si riferisce i, ma in forma di stringa (per poter usare l'operatore + senn con un int d errore)
3) infine aggiunge
p[s.start()+5:len(p)] #ovvero il resto della stringa p.

Quindi praticamente prende la stringa p e, dopo la parola "casa", ci infila il numero definito da i.

...Secondo me :p

frufru
10-12-2013, 13:50
Credo di aver capito, ti ringrazio! :)

Loading