Python
De Wiki de Nelly & Richard.
Sommaire
|
Python
Python est langage de programmation orienté objet.
Je vais mettre ici deux ou trois trucs et astuces, classes, exemples, ...
Modules sympathiques
reportlab : Génération de fichier PDF
- reportlab est un module permettant entre autre la génération de fichier PDF.
- La documentation disponible sur le site est très bien fournie.
Installation
$ sudo apt-get install python-reportlab >>> from reportlab.pdfgen import canvas
Exemple
# génération du PDF class pdf: """Génération des PDF""" def __init__(self, file): self.file = file self.canvas = canvas.Canvas(self.file) self.incr = 0 self.decr = 840 def newPage(self, initIncr = None): """Demande d'une nouvelle page""" self.canvas.showPage() self.decr = 840 self.drawLine(self.decr-150) if initIncr == 0: self.incr = 0 def drawLine(self, y): """Création d'une ligne séparatrice""" x1 = 0 y1 = y x2 = 596 y2 = y self.canvas.line(x1, y1, x2, y2) def drawText(self, info1, info2, info3, info4, info5, info6): """Ajout des informations dans le PDF""" self.incr += 1 if self.incr/2.0 == ceil(self.incr/2.0): abcisse = 10 else: abcisse = 350 if self.decr > 170 and self.incr > 1: self.decr -= 170 self.drawLine(self.decr-150) elif self.incr ==1: self.drawLine(self.decr-150) elif self.incr > 1: self.newPage() # ecriture info utilisateur self.canvas.drawString(abcisse, self.decr-20,"INFO1 : " + info1) self.canvas.drawString(abcisse, self.decr-40,"INFO2 : " + info2) self.canvas.drawString(abcisse, self.decr-60,"INFO3 : " + info3) self.canvas.drawString(abcisse, self.decr-80,"INFO4 : " + info4) self.canvas.drawString(abcisse, self.decr-100,"INFO5 : " + info5) self.canvas.drawString(abcisse, self.decr-120,"INFO6 : " + info6) def writePDF(self): """Ecrit et ferme le fichier PDF""" self.canvas.save()
PythonMagick : ImageMagick for python
- Implémentation d'ImageMagick en python
Installation
$ sudo apt-get install python-pythonmagick >>> import PythonMagick
Exemple
>>> from PythonMagick import Image >>> help(Image) >>> # déclaration de l'objet Image >>> pm = Image('./photo.jpg') >>> # rotation anti-horaire de 90° >>> pm.rotate(-90) >>> # Ecriture du fichier >>> pm.write('./photo.jpg')
csv
Installation
>>> import csv
Exemple
class fileCSV: """lecture/ecriture fichier csv""" def __init__(self, file, delimiter = ',', lineterminator = '\n'): """initialisation de myCSVreader""" self.file = file self.delimiter = delimiter self.lineterminator = lineterminator def listCSV(self): """transformation du fichier CSV en liste""" csvf = open(self.file) csvr = csv.reader(csvf, delimiter = self.delimiter, lineterminator = self.lineterminator) csvl = list(csvr) csvf.close() return csvl def writeCSV(self, ldata): """ecriture d'un fichier CSV""" csvf = open(self.file, 'w') csvw = csv.writer(csvf, delimiter = self.delimiter, lineterminator = self.lineterminator) csvw.writerows(ldata) csvf.close()
pyexiv2 : manipulation de données exif
Installation
$ sudo apt-get install python-pyexiv2 >>> import pyexiv2
Exemple
# lecture/ecriture exif class exif: """configuration exif d'une image""" def __init__(self, image): """initiialisation de la classe""" self.image = image self.exif = pyexiv2.Image(self.image) self.exif.readMetadata() def readExifKeys(self): """lit les infos exif disponibles""" return self.exif.exifKeys() def getExifData(self, keys = []): """lecture des données exif demandées""" dicDataExif = {} if len(keys) == 0: keys = self.readExifKeys() for exifKey in keys: dicDataExif[exifKey] = self.exif[exifKey] return dicDataExif def setExifData(self, dicDataExif): """ecriture des données exif demandées""" for exifKey in dicDataExif.keys(): self.exif[exifKey] = dicDataExif[exifKey] self.exif.writeMetadata() def delThumbnail(self): """suppression du thumbnail""" self.exif.deleteThumbnail() def getComment(self): """Get comment exif data""" return self.exif.getComment() def setComment(self, comment): """Set comment exif data""" self.exif.setComment(comment) self.exif.writeMetadata()
markdown : text to HTML
- markdown permet de transformer du texte en HTML et vice-versa
Installation
$ sudo apt-get install python-markdown >>> import markdown
Exemple
>>> from markdown import markdown >>> a="test\n essai ééééé" >>> markdown(a.decode('utf-8')) u'<p>test\n essai \xe9\xe9\xe9\xe9\xe9\n</p>' >>> print markdown(a.decode('utf-8')) <p>test essai ééééé </p>
python-ldap
Installation
$ sudo apt-get install python-ldap >>> import ldap
Exemple
import ldap # Classe ldapManip class ldapManip: """Gestion du ldap""" def __init__(self, list): """Initialise """ self.server = 'ldap://%s' % (list[0]) self.country = list[1] self.organisation = list[2] self.basedn = list[3] self.rootpw = list[4] self.rootdn = list[5] self.smbdomain = list[6] self.smbsid = list[7] self.dn = list[8] self.domain = list[9] self.connect = ldap.initialize(self.server) self.connect.simple_bind_s(self.dn, self.rootpw) def disconnect(self): self.connect.unbind_s() def mod(self, dn, oldAttrs, newAttrs): """Modification dans le ldap""" ldif = ldap.modlist.modifyModlist(oldAttrs, newAttrs) self.connect.modify_s(dn, ldif) def add(self, dn, attrsAdd): """Ajout dans le ldap""" ldif = ldap.modlist.addModlist(attrsAdd) self.connect.add_s(dn, ldif) def delete(self, dn): """Suppression dans le ldap""" self.connect.delete_s(dn) def search(self, filter, attrs = None): """Recherche dans ldap""" search = self.connect.search_s(self.basedn, ldap.SCOPE_SUBTREE, filter, attrs) return search
unicodedata : suppression des accents
Exemple
>>> import unicodedata >>> unicodedata.normalize('NFKD',u'ééÉÉÉÏÎ AZEéèàù').encode('ascii','ignore') 'eeEEEII AZEeeau'
python-mysqldb
- mysql-python permet de se connecter avec une base mySQL
Installation
$ sudo apt-get install python-mysqldb >>> import MySQLdb
Exemple
Ce petit exemple permet de se connecter à la base de votre et de lui demander d'exécuter la chaîne SQL de votre choix :
from MySQLdb import connect, DatabaseError def collectData(host, user, password, db, sql): """Récupération des données nécessaires""" data = {} try: conn = connect(host, user, password, db) except DatabaseError: print """Erreur de connection à la base :\n\thost=%s\n\tdb=%s""" % (host, password) exit(2) cursor = conn.cursor() for i in range(cursor.execute(sql)): row = cursor.fetchone() if not data.has_key(row[0]): data[row[0]] = [] data[row[0]].append(row[1]) conn.close() return data
SQLObject
- Tout est sur le site de SQLObject, qui est un Object Relational Manager pour tous type de base de données.
Installation
$ sudo apt-get install python-sqlobject >>> import sqlobject
Exemple
Envoi d'un mail en texte brut :
from email.MIMEText import MIMEText def sendMail(to, subject, text): sender = """toto <toto@domain>""" mail = MIMEText(text) # pour préserver nos accents mail.set_charset('utf-8') mail['From'] = sender mail['Subject'] = subject mail['To'] = sender smtp = smtplib.SMTP() smtp.connect() smtp.sendmail(sender, [to], mail.as_string()) smtp.close()
Command line
history + completion
- Sympathique le rappel de commande en BASH, ... et pour python ?
# fichier ~/.pythonrc import os.path, atexit, rlcompleter historyPath = os.path.expanduser("/home/USER/.python_history") def save_history(): rlcompleter.readline.write_history_file(historyPath) if os.path.exists(historyPath): rlcompleter.readline.read_history_file(historyPath) atexit.register(save_history) # completion rlcompleter.readline.parse_and_bind("tab: complete")
# dans .bashrc # history python export PYTHONSTARTUP=/home/USER/.pythonrc