En Python, j'accède à un fichier binaire en le lisant dans une chaîne puis en utilisant struct.unpack(...)
. Maintenant, je veux écrire à cette chaîne en utilisant struct.pack_into(...)
, mais j'obtiens l'erreur "Impossible d'utiliser la chaîne comme tampon modifiable". Quel serait un tampon approprié à utiliser avec le module struct
?Qu'est-ce qu'un tampon approprié pour le module struct de Python
Répondre
Si vous n'essayez pas de l'empaqueter dans un objet spécifique, utilisez simplement struct.pack
pour renvoyer une chaîne.
Sinon, ctypes.create_string_buffer
est un moyen d'obtenir un tampon mutable.
Le tampon est la mémoire pour une machine virtuelle simple, j'ai donc besoin de pack dans un objet spécifique. La mémoire est petite mais la copie 128-512k pour un seul accès à la mémoire n'est pas une option. – mdm
Comme noté dans une autre réponse, struct_pack
est probablement tout ce que vous devez utiliser. Cependant, les objets de type array prennent en charge le protocole de tampon et peuvent être modifiés:
>>> import array, struct
>>> a = array.array('c', ' ' * 1000)
>>> c = 'a'; i = 1
>>> struct.pack_into('ci', a, -0, c, i)
>>> a
array('c', 'a\x00\x00\x00\x01\x00\x00\x00 ...
Le protocole de tampon de départ était un peu d'une entaille principalement pour les extensions C. Il a été déprécié et remplacé par un new C-level buffer API and memoryview objects en Python 3 (et dans le prochain 2.7).
Deux possibilités sautent immédiatement à l'esprit:
Quelle version de python utilisez-vous? J'ai un peu joué avec des structures mais je n'ai jamais vu ça auparavant. – chrism1
J'utilise Python 2.6.4 – mdm