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