9
votes

Qu'est-ce qu'un tampon approprié pour le module de struct de Python

dans Python J'accède à un fichier binaire en le lisant dans une chaîne, puis en utilisant structure.unpack (...) . Maintenant, je veux écrire à cette chaîne en utilisant structure.pack_into (...) , mais je reçois l'erreur "Impossible d'utiliser la chaîne comme tampon modifiable" . Quel serait un tampon approprié à utiliser avec le module struct ?


1 commentaires

Quelle version de Python utilisez-vous? J'ai joué avec des structures un peu mais j'ai vu cela auparavant.


3 Réponses :


6
votes

Si vous n'essayez pas de l'emballer dans un objet spécifique, utilisez simplement struct.pack pour renvoyer une chaîne.

Sinon, CTTYPES.CREATE_String_Buffer est un moyen d'obtenir un tampon mutable.


1 commentaires

La mémoire tampon est la mémoire d'une machine virtuelle simple, donc j'ai besoin d'emballer 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.



7
votes

Comme indiqué dans une autre réponse, structure_pack code> est probablement tout ce dont vous avez besoin et doit utiliser. Cependant, des objets de type Array Prenez en charge le protocole de mémoire 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  ...


0 commentaires

-1
votes

Deux possibilités sautent immédiatement à l'esprit:

  • Vous pouvez utiliser le python StringIO Module pour faire une lecture / Écrire un tampon avec sémantique de fichier.

  • Vous pouvez utiliser le python TRAY Module pour obtenir un tampon que vous peut traiter comme une liste, mais qui contiendra juste des octets binaires.


0 commentaires