intégrer donnée binaire dans un script
Bonjour,
Je cherche à intégrer une chaine de texte représentant un fichier binaire dans un script Python, un peu à la manière des ressources de Qt.
Voilà un exemple très naïf utilisant le module base64:
Code:
1 2 3 4 5 6 7 8 9
| import base64
files = ['toto.py.gz']
out = open('build.out','w')
out.write('FILES = { \\\n')
for f in files:
data = base64.b64encode(open(p, 'rb').read())
out.write(' \'%s\':\'%s\', ' % (p, data))
out.write('}\n')
out.close() |
le fichier build.out contient alors un dictionnaire que je peux utiliser de cette façon:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| import os
import base64
execfile('build.out')
try:
os.mkdir('tmp')
except OSError:
pass
os.chdir('tmp')
for f, data in FILES.iteritems():
print p, len(data)
out = open(p, 'wb').write(base64.b64decode(data))
os.chdir('..') |
ça marche bien. mais je remarque que la chaine encodée avec b64encode est plsu longue que la donnée brute que je manipule. Normal j'imagine puisque je passe par un encodage. J'avais initialement essayé avec binascii.hexlify et j'avais un ratio 2 (comme spécifié dans la doc).
Je ne maitrise pas du tout ces sujets, quelle est la façon de faire optimale (cad la méthode pour laquelle la taille occupée par la chaine de texte dans mon script est la plus proche possible de la taille réelle du fichier).
Déjà, est ce que je suis sur la bonne piste avec base64 ?
on pourrait me dire:
- ben tu as qu'à faire une tarball et un script qui manipule la tarball !
- oui oui, je sais faire. c'est plus une curiosité: comment avoir ma tarball et mon script dans le même fichier (et que ce fichier soit un script python)
Merci pour votre aide !