StringIO avec les fichiers binaires?
Me semble pour obtenir les différentes sorties:
from StringIO import *
file = open('1.bmp', 'r')
print file.read(), '\n'
print StringIO(file.read()).getvalue()
Pourquoi? Est-ce parce que StringIO prend uniquement en charge les chaînes de texte ou quelque chose?
- avec ce code, le deuxième fichier.read() n'obtiendrait rien. Vous devez utiliser la méthode seek(0) avant de lire le fichier à nouveau.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous appelez
file.read()
, il va lire tout le fichier en mémoire. Alors, si vous appelezfile.read()
à nouveau sur le même objet de fichier, il aura déjà atteint la fin du fichier, donc il ne retourne une chaîne vide.Au lieu de cela, essayez par exemple la réouverture du fichier:
Vous pouvez également utiliser le
with
déclaration de rendre le code plus propre:En aparté, je vous recommande l'ouverture des fichiers binaires en mode binaire:
open('1.bmp', 'rb')
La deuxième
file.read()
renvoie en fait juste une chaîne vide. Vous devriez fairefile.seek(0)
de rembobiner le fichier interne de l'offset.Ne devriez-vous pas être à l'aide de
"rb"
à ouvrir, au lieu de"r"
, puisque ce mode suppose que vous serez traitement uniquement des caractères ASCII et des expressions du folklore?r
signifie le mode binaire. Aussi, merci de ne pas ajouter des accroches, signatures à vos messages.