2011-03-26 6 views
2

J'ai fait ce qui suit.Sortie du paquet python au format chaîne

from struct import pack, unpack 
t = 1234 
tt = str(pack("<I", t)) 

L'impression tt donne \xf3\xe0\x01\x00. Comment puis-je obtenir la valeur originale de t de tt?

J'ai essayé d'utiliser le déballage repr(tt) mais cela ne fonctionne pas. Comment vais-je faire cela?

Répondre

7
>>> t=1234 
>>> tt=pack('<I', t) 
>>> tt 
'\xd2\x04\x00\x00' 
>>> unpack('<I', tt) 
(1234,) 

>>> ttt, = unpack('<I', tt) 
>>> ttt 
1234 
1

Vous n'utilisez pas le bon package pour la sérialisation. le package struct n'est utile que pour le code python qui interagit avec le code C.

Pour la sérialisation dans une chaîne, vous devez utiliser le pickle module.

import pickle 

t = 1234 
tt = pickle.dumps(t) 
t = pickle.loads(tt) 
+1

Personne mentionné sérialisation. "Utile seulement pour le code python qui interagit avec le code C" ??? On utilise 'struct.pack' pour écrire des fichiers binaires dans un format particulier et' struct.unpack' pour les lire - quelle que soit la langue utilisée pour lire ces fichiers ou avoir été utilisée pour écrire ces fichiers à l'origine. Utiliser 'pickle' au lieu de' cPickle' et utiliser le protocole par défaut (text, ancient) est un non-sens. S'il vous plaît envisager de supprimer votre réponse. –

+0

@John Machin: bien que personne n'ait mentionné la sérialisation, le titre de la publication implique une sérialisation, aussi j'ai posté cette réponse comme un indice qu'il existe une façon standard de python de sérialiser les données. En ce qui concerne pickle/cPickle: à partir de python 3, "les versions accélérées sont considérées comme des détails d'implémentation des versions Python pures Les utilisateurs doivent toujours importer la version standard" (à partir de [doc] (http://docs.python.org/ release/3.1.3/whatsnew/3.0.html)). en ce qui concerne le protocole par défaut: le protocole pickle version 3, qui est maintenant la valeur par défaut pour python 3 et plus, est en effet binaire. –

+0

Les vrais programmeurs utilisent Python 1.5.2 –

1

unpack('<I', tt) vous donnera (1234,).

repr ne fonctionne pas car il ajoute des citations à la chaîne:

>>> repr('foo') 
'"foo"' 
+1

unpack (tt) vous donnera une exception - vous avez besoin de deux arguments. –