[Python] Re: doppio backslash non va
Daniele Zambelli
daniele.zambelli a inwind.it
Dom 4 Feb 2007 17:02:34 CET
Alle 10:47, domenica 4 febbraio 2007, SMZE ha scritto:
> Provo a spiegare meglio:
> Ho la necessità di dare significato a delle stringhe lette da file che
> rappresentano dei valori esadecimali. Per esempio il file è del tipo
>
> ...
> 03ff55a600
> 556c9daa12
> ...
>
> [...]
se ho capito bene, la prima parte del tuo problema è trasformare la stringa :
"03ff55a600"
nella stringa:
"\x03\xff\x55\xa6\x00"
Poiché in Python le stringhe sono oggetti immutabili, conviene passare
attraverso le liste:
1. trasformare la stringa in lista,
2. elaborare la lista,
3. ritrasformare la lista in stringa.
Ecco alcuni modi per risolvere il problema.
1. Orribile:
>>> n="03ff55a600"
>>> l=list(n)
>>> sep="\\x"
>>> for i in xrange(0, len(l)+3, 3):
l.insert(i, sep)
>>> s="".join(l)
>>> print s
\x03\xff\x55\xa6\x00
2. Con un ciclo:
>>> n="03ff55a600"
>>> sep="\\x"
>>> ls=[]
>>> for i in xrange(0, len(n), 2):
ls.append(n[i:i+2])
>>> s=sep+sep.join(ls)
>>> print s
\x03\xff\x55\xa6\x00
3. Con la costruzione di liste:
>>> n="03ff55a600"
>>> sep="\\x"
>>> ls=[n[i:i+2] for i in xrange(0, len(n), 2)]
>>> s=sep+sep.join(ls)
>>> print s
\x03\xff\x55\xa6\x00
4. Eliminando un po' di variabili intermedie:
>>> n="03ff55a600"
>>> sep="\\x"
>>> s=sep+sep.join([n[i:i+2] for i in xrange(0, len(n), 2)])
>>> print s
\x03\xff\x55\xa6\x00
> Grazie.
Prego
Daniele
Maggiori informazioni sulla lista
Python