Comment trouver octet null dans une chaîne de caractères en Python?
Je vais avoir un problème d'analyse de données après la lecture d'un fichier. Ce que je suis en train de faire est de lire un fichier binaire et le besoin de créer une liste d'attributs à partir de la lecture du fichier toutes les données dans le fichier est terminée par un octet nul. Ce que j'essaie de faire est de trouver toutes les occurrences d'un octet null terminated attribut.
Essentiellement prend une chaîne de caractère comme
Health\x00experience\x00charactername\x00
et de les stocker dans une liste.
Le vrai problème est que j'ai besoin de garder les octets nuls dans le tact, j'ai juste besoin d'être en mesure de trouver chaque instance d'un octet nul et stocker les données qui le précède.
OriginalL'auteur user2806298 | 2013-09-23
Vous devez vous connecter pour publier un commentaire.
Alors qu'il se résume à l'aide
split('\x00')
commodité wrapper pourrait être sympa.ensuite, vous pouvez faire quelque chose comme
Ceci a l'avantage supplémentaire de ne pas avoir besoin de charger tout le contenu dans la mémoire avant de séparer le texte.
Vous pouvez simplement ajouter le nullbyte arrière, droite?
Édité pour garder la nullbytes en place
OriginalL'auteur kalhartt
Python ne permet pas de traiter de NUL octets comme quelque chose de spécial; ils ne sont pas différents des espaces ou des virgules. Donc,
split()
fonctionne très bien:Noter que
split
est le traitement de\x00
comme un séparateur, pas un terminator, nous obtenons donc un supplément de chaîne vide à la fin. Si c'est un problème, vous pouvez simplement tranche:Vous pouvez simplement ajouter le nullbyte arrière, droite?
Comme justhalf implique, Python
str.split
méthode n'a aucun moyen de garder les séparateurs, mais il est facile de les ajouter sur le dos de chacun. Par exemple:[s+'\x00' for s in my_string.split('\x00')[:-1]]
.OriginalL'auteur abarnert
Pour vérifier si la chaîne a octet NUL, il suffit d'utiliser
in
de l'opérateur, par exemple:Pour trouver la position de l', utilisez
find()
qui serait de retour l'indice le plus bas dans la chaîne où la sous-chaîne de sous est trouvé. Utilisez ensuite les arguments optionnels commencer et fin pour la tranche de notation.OriginalL'auteur kenorb
Split sur des octets nuls;
.split()
renvoie une liste:Si vous connaissez les données se termine toujours par un octet nul, vous pouvez découper la liste de couper la dernière chaîne vide (comme
result_list[:-1]
).Vous pouvez simplement ajouter le nullbyte arrière, droite?
OriginalL'auteur Tim Peters