python bonne pratique

Rédigé par Paulo Aucun commentaire
Classé dans : Python Mots clés : enumerate

 

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

Les commentaires sont fermés.