shutil.copytree(dir_prog + 'images_src', 'tmpgen')
# boucler dans les images svg et remplacer les valeurs par défaut
# par la couleur choisie
for root, dirs, files in os.walk('tmpgen'):
for fichierSVG in files:
svg = open(root + '/' + fichierSVG, 'r')
svgContent = svg.read()
svg_modifie = svgContent.replace('#123456', couleur_site)
svg_modifie = svg_modifie.replace('XXtextXX', nom_site)
svg.close()
svg = open(root + '/' + fichierSVG, 'w')
svg.write(svg_modifie)
De là, j'ai 6 fichiers svg qui ont été copiés dans un répertoire temporaire nommé tmp_gen ... tout va bien.os.system('/Applications/Inkscape.app/Contents/Resources/bin/inkscape -z -e apple-touch-icon-120x120-precomposed.png -w 120 -h 120 tmpgen/tete-de-lion.svg')
Un soucis de fichier pas totalement écrit ? Nope, j'ai forcé un sleep de 5 secondes après la copie, ça change rien. Et c'est de mon disque dur à mon disque dur, une copie de quelques ko sur la même partition, ça prend pas si longtemps. Tant que je suis dans le script, le fichier fait 16384 octets. Quand le script a fini son taff (et alors qu'il n'a plus rien à faire sur le fichier), mon fichier fait 19413 octets (et est donc valide SVG) : WTF ? #!/usr/bin/python
# -*- coding: utf-8 -*-
import re
import os
import shutil
import subprocess
import time
dir_prog = '/Users/fred/tools/chartepy/'
dir_inkscape = '/Applications/Inkscape.app/Contents/Resources/bin/inkscape'
couleur_site = '#623111'
nom_site = 'test'
choix_qualite = 'y'
# virer le repertoire temporaire des fichiers source :
shutil.rmtree('tmpgen')
shutil.copytree(dir_prog + 'images_src', 'tmpgen')
# boucler dans les images svg et remplacer les valeurs par défaut
# par la couleur choisie
for root, dirs, files in os.walk('tmpgen'):
for fichierSVG in files:
svg = open(root + '/' + fichierSVG, 'r')
svgContent = svg.read()
svg_modifie = svgContent.replace('#123456', couleur_site)
svg_modifie = svg_modifie.replace('XXtextXX', nom_site)
svg.close()
svg = open(root + '/' + fichierSVG, 'w')
svg.write(svg_modifie)
print("5 secondes de pause")
time.sleep(5)
os.system('ls -l tmpgen/tete-de-lion.svg')
Et ça donne :[~/tmp]@Pom
fred ? ~/tools/chartepy/test.py
5 secondes de pause
-rw-r--r-- 1 fred staff 16384 14 oct 10:51 tmpgen/tete-de-lion.svg
[~/tmp]@Pom
fred ? ls -al tmpgen/tete-de-lion.svg
-rw-r--r-- 1 fred staff 19413 14 oct 10:51 tmpgen/tete-de-lion.svg
Ce message a été modifié 2 fois.
Dernière modification : 14 octobre 2014
à 10:56 par
Tchou.
Ce message a été modifié 1 fois.
Dernière modification : 14 octobre 2014
à 11:04 par
roidelapluie.
PetitCalgonEn C#, on a des using qui permettent de libérer l'objet une fois qu'on en a plus besoin, si l'objet est intelligent, il appelle la fonction close si il était ouvert (au hasard un FileStream par exemple).Même chose en python:
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
if __name__ == '__main__':
main()
En gros, si ton fichier est exécuté comme script (et donc son nom vaut "__main__" ; dans le cas d'un import, __name__ vaut le nom du fichier), alors il exécute main(). Ca te permet de rendre ton code importable (si besoin) ailleurs, de forcer l'écriture d'au moins une fonction... l'idéal serait d'éviter tes variables globales, et donc d'avoir quelque chose du genre :import machin
import truc
def main(x, y, z):
# code de la fonction
if __name__ == '__main__':
main('root', 'filename', 42)
Ensuite, tu vas découvrir les joies des modules docopt [edit : et pas doctest] et d'argparse, et en 2 temps 3 mouvements, t'auras un joli truc exécutable qui gère plein de paramètres super facilement (honnêtement, jete un oeil à argparse.... l'usage basique est VRAIMENT très simple à mettre en place !!).
Ce message a été modifié 1 fois.
Dernière modification : 14 octobre 2014
à 12:55 par
Guybrush.
Ce message a été modifié 1 fois.
Dernière modification : 14 octobre 2014
à 12:07 par
Tchou.
1996-2024 — Lexpage v4 — GPLv3 (sources)
page générée le 25 novembre 2024 à 08:01:21