[PIPython] problema

Ernesto e.picardi
Ven 19 Nov 2004 15:16:41 CET


Salve ragazzi,
sto lavorando con un file di testo del tipo:

"(s1,(((((((((s2,(s35,s38)),s39),(((s5,s28),s42),(s18,(s37,s50)))),((((s6,s34),s23),s49),s45)),s16),s46),((s7,s44),s43)),(((((s4,s25),(((s12,s31),s40),s22)),s8),s10),((((s9,s11),s27),(s15,s29)),s30))),s21),(((((((((s3,(((s13,s24),(s17,s41)),s48)),s26),s19),s20),s36),s47),s33),s14),s32));"

Una struttura nidificata, ma ciò che intendo fare è semplicemente aggiungere a ciascun nome (s1, s2, s35 ecc.) il carattere ":" seguito da un numero fisso, in modo da ottenere qualcosa del genere:
"(s1:0.1,(((((((((s2:0.1,(s35:0.1,s38:0.1)),s39:0.1),...ecc."

Ho provato con le espressioni regolari e con le seguenti istruzioni:

reg=re.compile(r"\w+", re.I)
taxa=reg.findall(tree)

dove tree è la stringa testuale.
La lista taxa creata contiene tutti i nomi come mi sarei dovuto aspettare:

['s1', 's2', 's35', 's38', 's39', 's5', 's28', 's42', 's18', 's37', 's50', 's6', 's34', 's23', 's49', 's45', 's16', 's46', 's7', 's44', 's43', 's4', 's25', 's12', 's31', 's40', 's22', 's8', 's10', 's9', 's11', 's27', 's15', 's29', 's30', 's21', 's3', 's13', 's24', 's17', 's41', 's48', 's26', 's19', 's20', 's36', 's47', 's33', 's14', 's32']

Solo che quando utilizzo il comando:

for i in taxon:
  if i in tree:
   tree=tree.replace(i, i+":"+"0.1")

La stringa tree risultante è del tipo:
(s1:0.1,(((((((((s2:0.1,(s3:0.15:0.1,s3:0.18:0.1)),s3:0.19:0.1),(((s5:0.1,s2:0.18),s4:0.12:0.1),(s1:0.18,(s3:0.17:0.1,s5:0.10)))),((((s6:0.1,s3:0.14:0.1),s2:0.13),s4:0.19:0.1),s4:0.15:0.1)),s1:0.16),s4:0.16:0.1),((s7:0.1,s4:0.14:0.1),s4:0.13:0.1)),(((((s4:0.1,s2:0.15),(((s1:0.12,s3:0.11:0.1),s4:0.10),s2:0.12)),s8:0.1),s1:0.10),((((s9:0.1,s1:0.11),s2:0.17),(s1:0.15,s2:0.19)),s3:0.10:0.1))),s2:0.11),(((((((((s3:0.1,(((s1:0.13,s2:0.14),(s1:0.17,s4:0.11)),s4:0.18)),s2:0.16),s1:0.19),s2:0.10),s3:0.16),s4:0.17),s3:0.13),s1:0.14),s3:0.12));

Da s1 a s9 non ci sono problemi, ma quando si tratta di sostituire da s10 a s50, viene considerato solo il primo numero seguente la s. Per esempio nel caso di s23 ottengo s2:0.13.

Qualcuno di voi ha qualche suggerimento? In teoria sembra semplice, ma in pratica...

Grazie in anticipo per il vostro aiuto

Ernesto
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://list.zope.it/pipermail/python/attachments/20040204/b4455254/attachment.html


More information about the Python mailing list