8
votes

Le cornichon Python a-t-il un caractère / séquence illégale que je peux utiliser comme séparateur?

Je veux faire (et décoder) une seule chaîne composée de plusieurs cornichons Python.

y a-t-il un caractère ou une séquence qui est sûr à utiliser comme séparateur de cette chaîne? p>

Je devrais être capable de faire la chaîne comme si: p> xxx pré>

i devrait être capable de prendre cette chaîne et de reconstruire les objets comme: p>

[pickle.loads(s) for s in input.split(PICKLE_SEPARATOR)]


1 commentaires

Étant donné que Redis Les valeurs peuvent être des collections de chaînes, pourquoi ne stockez-vous pas seulement chacun séparément?


5 Réponses :


-1
votes

Une solution serait de préparer votre chaîne de cornichons avec des données sur le nombre de caractères que chaque élément constituant contient.


0 commentaires

2
votes

Je n'utilise pas beaucoup de python, mais y a-t-il une raison pour laquelle vous ne pouviez pas simplement corner un tableau à la place? Donc, la décapage devient xxx

et reconstruction devient xxx


edit 1: aussi, selon < un href = "https://stackoverflow.com/questions/2857970/why-doesnt-appending-binary-pickles-work/2858096#2858096"> Cette réponse , la sortie marinée est auto-terminale; Ainsi, vous pouvez corroger avec xxx

et restaurer avec xxx

Je ne suis pas sûr qu'il y ait un avantage à cela, bien que. (Bien que je n'en ai pas vu un, il se peut que ce soit un meilleur moyen que cette vilaine boucle / exception, comme je l'ai dit, je n'utilise pas beaucoup de python.)


1 commentaires

Cela ne fonctionnera malheureusement pas pour les ruisseaux. J'ai besoin de lire la chaîne séparément car je ne peux pas utiliser de cornichon charger mais seulement charges



2
votes

EDIT: strong> Premièrement, considérez la réponse du gnibbler, qui est évidemment beaucoup plus simple. La seule raison de préférer celui ci-dessous est si vous voulez pouvoir diviser une séquence de cornichons sans les analyser.

Un pari assez sûr consiste à utiliser une nouvelle UUID que vous ne réutilisez jamais ailleurs. Evaluez uuid.uuid4 (). Octets code> une fois et stocke le résultat dans votre code comme séparateur. Er.g.:

>>> import uuid
>>> uuid.uuid4().bytes
'\xae\x9fW\xff\x19cG\x0c\xb1\xe1\x1aV%P\xb7\xa8'


0 commentaires

8
votes

C'est bien de simplement caténer les cornichons ensemble, Python sait où chacun se termine xxx


1 commentaires

Un potentiel gotcha: cela ne fonctionne pas pour les chaînes, uniquement des objets de type fichier: essayez pickle.load (s) trois fois, seul le dict est renvoyé.



0
votes

Dans Python 3, il peut être fait à l'aide de BYTESIO:

{} 
[]
()


0 commentaires