rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[PYTHON] Lire/écrire un fichier binaire

Posté par Christophe, le samedi 10 mai 2008 à 16:53:39
Bonjour à tous.

C'est une question qui est déjà tombée sur ce forum et ailleurs, et qui est (un peu) documentée dans la doc. Mais tous les essais que je fais se soldent immanquablement par un échec.

Mon problème est assez simple : je veux lire un fichier quelconque en binaire, et plus précisément pouvoir remplir une suite de listes [0..99] par les valeurs 0/1.

Un classique :
f = open (fichier, "rU")
f = open (fichier, "rb")
ne me donnent rien, si j'appelle f.read(1), il me renvoie un CHAR. Le mieux que j'arrive à faire, c'est prendre la valeur ASCII et la convertir en binaire, mais c'est lent et pas du tout satisfaisant. Et ça ne me permet pas d'écrire.

Comment, donc, arriver à ouvrir en R (ou en W, mais pas en même temps) un fichier en mode binaire ? Et tout ça sous XP, Python 2.4.3.


Merci à vous,

Christophe
Répondre à Christophe  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le samedi 10 mai 2008 à 19:51:38
Salut,

char ou octet c'est la même chose en python. En réalité tu ouvres bien tonfichier en binaire et read() t renvoie les valeurs en octet. Si tu affiches avec un print il remplacera les octets en caractères quand il pourra.

La conversion de ces octets sous forme de chaine composée de 1 et 0, c'est un truc que tu ne peux faire que manuellement.
Répondre à kilian

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Christophe, le dimanche 11 mai 2008 à 12:05:41
All right.

Lire un fichier en binaire, c'est lire tous les CHAR, non interprétés. Je vais lire CHAR(13), par exemple, et pas \n. Je viens de le comprendre :)
Et effectivement, à partir de là, je dois convertir en binaire tous mes ORD(char)... snif :)

Merci.


##
Christophe
Répondre à Christophe

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le dimanche 11 mai 2008 à 12:20:18
Non c'est pas ça.
Tu lis ton fichier et là tu as une suite d'octet. En faisant un print dessus, tu verras la représentation sous forme de char ou bien sous forme hexadécimale s'il n'arrive pas à trouver de code ascii correspondant à l'octet.

Si tu veux une représentation sous forme binaire, c'est à toi de la programmer. Mais ça n'est qu'une représentation.
Répondre à kilian

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Christophe, le dimanche 11 mai 2008 à 12:26:27
Si j'exécute :

fichier = "document.txt"
f = open (fichier, "rU")
while (1):
tampon = f.read(1)
if tampon == "": break
print tampon
print type(tampon)

Tu verras que le type tampon, qu'il lit dans le fichier ouvert en mode rU, c'est STR. Il lit une chaîne de caractères. D'ailleurs, tu peux aussi demander f.read(n), avec n caractères à lire.

Je ne comprends pas ce que tu veux dire quand tu dis que le CHAR (ou le code hexa) affiché n'est qu'une représentation... ?


##
Christophe
Répondre à Christophe

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
kilian, le dimanche 11 mai 2008 à 12:39:37
Oui c'est un str, read retourne toujours un str.

Un octet est une valeur et cette valeur tu peux la représenter de diverses manière. Exemple si c'est 128 en décimal, ça donnera 0x80 en hexa, 1000 0000 en binaire etc...

Pour plus de simplicité, python l'affiche en hexa, voire en char s'il trouve une correspondance ascii de la valeur.
Répondre à kilian

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Christophe, le dimanche 11 mai 2008 à 13:57:00
Moui c'est vrai qu'avec python, les variables ne sont pas déclarées. Ca m'a toujours gêné, ça.
Mais pour moi, un STR, c'est un STR ! C'est composé d'une suite de CHAR, qui sont eux même des valeurs ASCII [0..255] codées sur un octet.

C'est sûr qu'en mémoire, c'est toujours la même chose, mais c'est interprété différement. Enfin, je ne comprends toujours pas cette distinction... ?


##
Christophe
Répondre à Christophe

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sebsauvage, le dimanche 11 mai 2008 à 17:26:11
C'est sûr qu'en mémoire, c'est toujours la même chose, mais c'est interprété différement. Enfin, je ne comprends toujours pas cette distinction... ?

Tu l'as dit: c'est interprété différemment.

Quand tu lis un fichier binaire, la valeur 65 peut être le caractère A, ou un pixel bleu ou une note de musique... tout dépend de l'interprétation que tu en fera.

Mais ce n'est pas Python qui peut savoir: C'est le programmeur qui va donner un sens à ces octets. :-)
Répondre à sebsauvage
Logiciels pertinents trouvés dans les téléchargements
Télécharger IsoBuster 2.4IsoBuster - IsoBuster est un outil de récupération de CD, DVD, HD-DVD et BD prenant en charge tous les formats et tous leurs système de...Catégorie: Gravure
Licence: Freeware/gratuit
Télécharger DS Monkey Audio - Filtre APE 1.00DS Monkey Audio - Filtre APE - Le format MonkeysAudio (extension *.ape) est un format de compression audio lossless (sans pertes) permettant de réduire la...Catégorie: Plugins audio
Licence: Freeware/gratuit
Télécharger ModPlug Player 1.46.01ModPlug Player - MODPlug est un lecteur permettant de lire des fichiers MOD, c'est-à-dire des pistes de séquenceurs (trackers), mélant des...Catégorie: Lecteurs audio
Licence: Freeware/gratuit
Télécharger GOM Player 2.1.9.3754GOM Player - GOM Player est un lecteur vidéo léger et rapide. Tout comme VLC , il inclue déjà la plupart des codecs nécessaires à la...Catégorie: Lecteurs vidéo
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [PYTHON] Lire/écrire un fichier binaire »