écriture de fichiers binaires avec python

Fermé
reboulip - 26 oct. 2012 à 18:27
 reboulip - 29 oct. 2012 à 10:05
Bonjour,

Je rencontre une difficulté avec Python, dans l'utilisation de cPickle.
J'ai un parser qui lit un fichier, et stocke une partie de son contenu dans un objet. Comme le parsing du fichier prend du temps, en raison de la taille de ce dernier, j'aimerais stocker le contenu de l'objet issu du parsing dans un fichier, que je peux rouvrir à chaque utilisation de mon outil.

Mon problème est que le fichier dans lequel j'écris l'objet (je l'appelle "MAN123"), grâce au module cPickle, met aussi pas mal de temps à se charger. Et en éditant le fichier, je me suis rendu compte qu'il était lisible, donc que ce n'était pas un binaire : je pense que c'est à cause de ça que la lecture est si lente. Et en effet, quand j'utilise la commande file, je n'obtiens pas de résultat :
$ file MAN123
MAN123:


Comment faire en sorte que le fichier soit un fichier binaire (cela renverrait alors "MAN123: data", si je ne me trompe pas) ?

Merci d'avance
A voir également:

1 réponse

Je progresse un peu : je suis passé à 'shelve' à la place de cPickle, ça a l'air de marcher un peu mieux (gain de 30% sur le temps de chargement d'un objet de même taille), mais c'est toujours un peu juste.

Quand j'écris mon objet avec shelve, il m'écrit toujours un fichier "lisible" au sens où je peux l'éditer et il contient des caractères ASCII.
Par contre, quand j'utilise python en ligne de commande pour faire des tests simples, comme ci-dessous, j'obtiens bien un fichier binaire...

>>> import shelve
>>> test_shelve = shelve.open('test_shelve')
>>> test_shelve['test1'] = 'toto'
>>> test_shelve['test2'] = 'tata'
>>> test_shelve.close()
>>> import os
>>> os.system('cat test_shelve')
??????RL?K?h^???S'tata'
p1
.test2?????????RL?K?h^S'toto'
p1
.test10


D'où la différence peut-elle venir ?
0