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:
le fichier build.out contient alors un dictionnaire que je peux utiliser de cette façon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
ç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).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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('..')
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 !
Partager