python bonne pratique
Rappel en vrac de quelques commandes Python :
La fonction enumerate (qui genere un numero d'indice automagiquement) :
texte=file('/tmp/monFichier.config').read() for num in enumerate(texte.split('\n')): print '%d\t%s' % num
Condition ternaire :
#la variable comps sera égale = 'comps_dvd.xml' si la variable iso contient '2007' # sinon comps sera égale à 'comps.xml' comps = 'comps_dvd.xml' if '2007' in iso else 'comps.xml'
Liste de comprehension :
#le if predicat n'est pas obligatoire [expression for element in liste if predicat] #possible aussi en splitant une ligne de fichier par ex... nom, prenom, age = [i for i in list(ligne.split(";"))]
src : http://fr.openclassrooms.com/informatique/cours/pratiques-avancees-et-meconnues-en-python
Le generator expression : très semblable au lise ci-dessus (on utilise les parenthèses au lieu des crochets.
#pas de crochets... (expression for element in liste) #ou fonction(expression for element in liste) #ex >>>liste = range(10) >>>gen = (elem - 5 for elem in liste) >>>for elem in gen: print elem #autre façon d'ecrire une liste de comprehension >>>list(elem - 5 for elem in liste) # Une autre façon d'écrire une list comprehension ;
src : http://fr.openclassrooms.com/informatique/cours/pratiques-avancees-et-meconnues-en-python
La fonction zip : permet de combiner plusieurs listes en une seule
#liste1 liste1 = list(range(0,10)) #liste2 liste2 = list(range(11,20)) for e1, e2 in zip(liste1, liste2) : print e1, e2
Chargement d'un dictionnaire depuis 2 tableaux :
#le dicitionnaire est initialisé depuis 2 tableaux dico = dict(zip(tab1, tab2 ))
Utilisation du module 'ConfigParser' :
Pour rappel, ce module permet de lire des fichiers de conf de type '.ini'
ex :
[main] #section bazar = truc bidule = machin [site1] #section foo = bar ect = suite
Le problème survient pour lire un fichier de conf sans 'section' , le module se plante comme une bouze...
Pour lire ce type de fichier, on va ajouter une section "fake" en début de fichier...
#exemple de fichier sans section... cat 'fic.conf' ... version = 4 release = 2 ... #acceder aux données avec configParser sans section : #!/usr/bin/python -u # -*- coding:utf-8 -*- # # from ConfigParser import ConfigParser from StringIO import StringIO def lec_Fic_Conf(param): parser = ConfigParser() with open('/tmp/fic.conf') as stream: foo = StringIO('[top]\n' + stream.read()) parser.readfp(foo) return parser.get('top', param) Version = lec_Fic_Conf('version') Release = lec_Fic_Conf('release')
source :
http://stackoverflow.com/questions/2885190/using-pythons-configparser-to-read-a-file-without-section-name
Charger une table depuis un fichier en supprimant les saut de ligne :
#utilisation des magiques comprehension de list files = [ file.strip('\n') for file in open('/tmp/liste_files.conf') ]
source :
http://stackoverflow.com/questions/3277503/python-read-file-line-by-line-into-array