[Python] ValueError: embedded null byte

Gollum1 gollum1.smeagol1 a gmail.com
Mer 4 Apr 2018 13:15:13 CEST


Il 4 aprile 2018 12:38, Alessandro Dentella <sandro a e-den.it> ha scritto:
> On Wed, Apr 04, 2018 at 12:05:44PM +0200, Gollum1 wrote:
>> Il 4 aprile 2018 08:56, Alessandro Dentella <sandro a e-den.it> ha scritto:
>>
>> >> camera = "DigitalDigital HH"
>> >
>> > Se fosse veramente quello il valore della variabile 'camera' non ci
>> > sarebbero problemi:
>> >
>> >    $ ipython3
>> >
>> >    In [1]: import os
>> >
>> >    In [2]: camera = "DigitalDigital HH"
>> >
>> >    In [3]: os.path.exists(os.path.join('/tmp', camera))
>> >    Out[3]: False
>> >
>> > Per prima cosa aggiungerei nel try/except:
>> >
>> >    import ipdb; ipdb.set_trace()
>>
>> questo non mi funziona, non ho il modulo installato evidentemente,
>> provvederò quanto prima.
>
> vitale per un debug efficace:
>
>    pip install ipdb
>
>
>> > così sperimenti direttamente e ti fai un'idea chiara.
>> > len(camera) ti restituisce 17 o la variabile ha qualche carattere non
>> > rappresentato magari nella tua codifica?
>>
>> bella lì... mi len mi dice che è lungo 32 caratteri... :O
>>
>> > Prova con repr(camera)
>>
>> (32) - DigitalDigital HH
>> 'Digital\x00\x00Digital \x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00'
>>
>> eccolo lì... e spiegato anche il motivo per cui anche facendo uno
>> split sullo spazio, in realtà non risolvevo il problema, non è
>> visibile, ma rompe...
>>
>> esiste un qualche comando che mi permetta di "sanare" una stringa così
>> fatta? un camera.encode(utf8) potrebbe essere la soluzione?
>
> In [2]: import re
>
> In [3]: camera = 'Digital\x00\x00Digital \x00H\x00\x00\x00\x01\x00\x00\x00H\x00\x00\x00\x01\x00'
>
> In [4]: c2 = re.sub('[^a-zA-Z0-9_ ]', '', camera)

interessante questo, io stavo cercando il modo di eliminare i
caratteri non stampabili, tu in pratica mi dici di creare una nuova
stringa, con i soli caratteri stampabili... i non stampabili se ne
vanno di default...

non esistevano delle macro con regex per scegliere i set di caratteri?
blank, number o cose del genere... un vago ricordo...

>
> In [5]: len(c2)
> Out[5]: 17
>
> In [6]: c2
> Out[6]: 'DigitalDigital HH'
>
> In [7]: len(camera)
> Out[7]: 32

tutto sommato mi pare la soluzione migliore...

adotterò...
grazie

Byez
-- 
Gollum1 - http://www.gollumone.it
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python