Ajouter des octets de la chaîne?
J'ai un fichier que j'ai ouvert en Python que je suis en train d'écrire à un autre fichier de sortie. J'ai besoin qu'elle soit un multiple de 16 ans, en taille, c'est ce que j'ai imaginé:
with open(input_file, 'rb') as infile:
with open(output_file, 'wb') as outfile:
while True:
input_chunk = infile.read(64)
if len(input_chunk) == 0:
break
elif len(input_chunk) % 16 > 0:
input_chunk.extend([0 for i in range(len(input_chunk) % 16)])
output_file.write(input_chunk)
Malheureusement, il ne réussit pas à ajouter des zéros avec:
AttributeError: 'str' object has no attribute 'extend'
Tout d'abord, pourquoi faire j'ai une chaîne de caractères ici, plutôt qu'un tableau d'octets? Je suis en train de lire le fichier binaire en mode binaire.
Deuxième, si je fais face à une chaîne de caractères, comment puis-je écrire un nombre d'octets avec la valeur 0
à la fin de cette chaîne?
les chaînes de caractères sont des objets immuables.
Peut-être input_chunk = input_chunk + '\0' * (len(input_chunk) % 16)
Est-il possible que je peux lire un fichier sous la forme de tableaux d'octets?
Je pense que le problème est sur la prolonger l'appel.
Êtes-vous à l'aide de Python 2 ou 3?
Peut-être input_chunk = input_chunk + '\0' * (len(input_chunk) % 16)
Est-il possible que je peux lire un fichier sous la forme de tableaux d'octets?
Je pense que le problème est sur la prolonger l'appel.
Êtes-vous à l'aide de Python 2 ou 3?
OriginalL'auteur Naftuli Kay | 2013-02-19
Vous devez vous connecter pour publier un commentaire.
Parce que c'est ce
file.read
est de retour ...Vous ne pouvez pas écrire sur cette chaîne, car les chaînes sont immuables. Cependant, vous pouvez l'écrire sur une autre chaîne et de créer de nouvelles chaînes par concaténation:
Noter que si vous savez que vous avez 64 octets et que vous voulez une chaîne de caractères qui est de 80 octets rembourré avec des valeurs null,
struct.pack
sera pad automatiquement avec les valeurs null:OriginalL'auteur mgilson
En Python 2.x, un
str
objet est un "tableau d'octets".Si vous avez besoin d'un mutables, tableau, utilisez un objet bytearray sur les versions 2.6+:
Autrement:
bytearray
en 2.7.En fait,
bytearray
est disponible depuis la 2.6 bytearrayQue fait
bytearray
un meilleur choix ensuite.OriginalL'auteur JBernardo
Suffit d'utiliser
bytearray
et vous devriez être bon en tant que-est:Mais je voudrais juste utiliser quelque chose comme
[0] * (16 - len(input_chunk)%16)
au lieu d'une liste de la compréhension pour le rembourrage.OriginalL'auteur Mark Reed
Vous pouvez remplir votre
input_chunk
comme ce\x00
devra être dynamique, comme je vais changer ça pour être le reste delen(input_chunk)%16
.OriginalL'auteur John La Rooy