Keynote Python
Keynote Python
Keynote Python
(oriente web)
JanKrause/BibliothquedelaFacultdeMdecine/UniversitdeGenve
1
Licence ?
Python Software Licence (PSL), une licence open source, calque sur la licence Apache et compatible GNU GPL
2
Apprendre: un livre
LearningPython ParMarkLutz Edition:3,revised PubliparO'Reilly,2007 ISBN9780596513986 700pages
UNIGE,Bibliothqued'Anthropologie
[liensurlecatalogue]
http://jankrause.net/python/tutorial/
r = 3.1415
c = 1.5 + 2j
chanes de caractres ( 'abc' ou ''abc'' ou ''''''multi-lignes'''''' ) s = 'une chane\t' + ''une autre chane'' + '\nune autre linge' listes: L = [1, 'abc', 3.14] emboites: L = [ [1, 2], 3 ]
dictionnaires (dont les entres sont repres par des cls) D = {'jan': 74, 'aline':23, 'christian':None, 'z':[1, 2, 3]} D['jan'] 74130
boolens
A = True
B= False
Doc:
http://docs.python.org/library/re.html
Exemple: ./divers/regexp.py
7
Types de donnes
Indexes des types de donnes composs (listes, chaines de caractres, ...) : matriser le slicing. Liste = [ 'zero' , 'un' , 'deux' , 'trois' , 'quatre' ]
Indices
Liste[0] 'zero' Liste[0:2] ['zero', 'un'] Liste[1:2] 'un' Liste[-1] 'quatre' Liste[:2] ['zero', 'un'] Liste[-2:] ['trois', 'quatre'] Liste[2:2] = [] Liste[2:2] = 'un bis' insre en position 2
8
liste = [1, 2, 3, 4, 5, 6, 7, 'livre', 'livre'] Longueur de la liste (string, dictionnaire, ...): l = len(liste) Ajouter un lment la fin: list.append('nouvel lment') Extraire un lment: element = list.pop(indice) Compter le nombre d'occurrences: n = list.count('livre') Trier les lments: list.sort() Renverser la liste: list.reverse() Etc. -> http://docs.python.org/tutorial/datastructures.html
9
10
11
Ou
lignes = open( "fichier.txt", "r" ).readlines() # liste de lignes
12
Ecrire de l'UTF-8
import codecs # module de la bibliothque standard open( "fichier.txt", "w" ).write( s.encode( "utf-8" ) )
13
BouclesFor(surtouttypedesquences)
list=[0,1,2,3] foriinlist: print(i) foriinrange(4): print(i)
Boucles While
Conditions
Lesoprateursboolens: <><=>===notandor L'oprateurin 'a'in'abc'>True 12in[1,12,23]>True 'jan'in{'jan':30,'aline':30}>True
Remarque: LeschainesvidessontFalse,sinonTrue Nombres:0et0.0sontfalse,sinonTrue Listesetdictionnaires:sividessontFalse,sinonTrue
15
Variables n = 128 del(n) Entres de dictionnaires d = {'a':1, 'b':2} del( d['a'] ) del( d ) Modules (voir ci-aprs) import string del(string)
Elmentsdelistes
Objets(voirciaprs)
Ne pas utiliser de 'tabs' ! On peut continuer un ligne logique sur la ligne suivante du script au moyen d'un \
Utiliser utf-8 pour l'encodage (pas de BOM) Dbut d'un script (*.py):
#!/usr/bin/python # -*- coding: utf-8 -*Laligneest commente Chemindel'interprteur python Dclarationd'encodage, pourpythonetl'diteur
17
Multi-platteformes Hautement configurable python_mode (ex: touche tab -> 4 espaces...) PyMacs (macros d'emacs en python)
viter la duplication de code (redondance) simplifier la maintenance, le dveloppement augmenter la lisibilit dcomposer une tche complexe rpartir le travail entre programmeurs
19
Fonctions
def nom_fonction ( pa1, pa2, ... ) : """ Documentation ... """ corps de la fonction return variable
deffib(n): """ CalculelasuitedeFibonaccijusqu'n. 1,1,2,3,5,8,13,21,34... """ a,b=0,1 output=[] whileb<=n: output.append(b) a,b=b,a+b returnoutput fib(100) help(fib)
20
Modules
Permettent de regrouper les fonctions par thme dans des fichiers, les rendant ainsi rutilisables dans plusieurs programmes. Un module, c'est simplement un fichier .py qui contient plusieurs fonctions, gnrateurs et/ ou classes!
21
Modules
Exempled'architectured'unprogrammeenpython: Unprogramme... b.py module a.py toplevel Modules dela bibliothque standard
c.py module
22
Packages
Le packages sont des ensembles de modules. Concrtement, il s'agit simplement de rpertoires contenant plusieus modules. Pour consulter la structure d'un package, d'un module, ou d'un objet: import os dir( os ) help(os.chdir)
Packagesound
sound/Toplevelpackage __init__.py formats/Subpackage1 __init__.py wavread.py wavwrite.py auread.py auwrite.py effects/Subpackage2 __init__.py echo.py surround.py reverse.py ...
Modulereverse
23
24
Permet de minimiser la redondance; Permet d'crire de nouveaux programmes en jouant sur l'hritage du code existant et sa personnalisation plutt qu'en le rcrivant; Profiter des web-frameworks OO du type (voir ci-aprs: tutorial Django). Ruby on Rails fonctionne aussi sur ce principe. Faire abstraction du SQL (voir ci-aprs ORM: object relaitonal mapping).
25
Exemple: une voiture, une pense, une personne, une fleur, une encyclopdie, un codex, un article ...
un objet est dfinit par un identifiant unique, des mthodes (fonctions s'appliquant lui-mme), et des attributs (variables propres lui-mme); un objet est driv d'une classe: on dit qu'un objet est une instance d'une classe; une classe peut hriter des proprits (mthodes, attributs) d'une ou de plusieurs autres classes.
26
classPulmonaire .couleurs
Objplante0
Objplante1
Voirautreexemple:./oo/oo.py
28
Acqurir des modules python en toute simplicit? Utilisez Ubuntu (ou Debian)!
Riche slection: 1325 paquets lis python Les paquets en C sont prcompils Installation
Mise--jour automatique
Multi-platte-forme: Windows, MacOSX, Linux (aussi sous Ubuntu) Gestion des dpendances http://pypi.python.org/pypi/setuptools
shutil.copy(src, dst) # copie de src vers dst shutil.copytree(src, dst) # copie rcursive shutil.copytree(src, dst, shutil.ignore_patterns('*.pyc', \ 'tmp*') ) shutil.rmtree(path) # effacement rcursif shutil.move(src, dst) # dplacement rcursif
31
Multiprotocole (ftp, http, file, ...) Envoi de formulaires par POST et GET Supporte authentification, user-agent, etc. Mais relativement de bas niveau => beaucoup de code HOWTO: http://docs.python.org/howto/urllib2.html Exemple simple:
Fonctionnalits:
Remplissage de formulaire simplifie. Systme de parsing et de suivi des liens Historique (mthodes .back() et .reload() ). Prise en compte automatique de robots.txt Gestion automatique de HTTP-Equiv et Refresh
Exemple: ./network/cff.py
33
Parser du HTML
HTMLparser (Bibliothque Standard)
Permet de parser du HTML... mais n'est pas tolre mal les horreurs que l'on trouve sur le web (les navigateurs sont tolrants): balises non ferms, overlappes, etc.
module: beautifulsoup Package ubuntu: python-beautifulsoup URL: http://www.crummy.com/software/BeautifulSoup/ Fonctionne aussi pour le XML mal formatt! Exemple: ./network/cff.py
34
./network/pYsearch/exemple.py ./network/pYsearch/websearch.py
35
NB:
Sendmail doit tre configur Penser aux headers (cf. exemple) Relever une boite POP ou IMAP : imaplib (bib. Std.)
37
./xml/simple/2marcxml.py
Mais galement:
38
Bases de donnes
Python supporte les principaux SGBDR:
PostgresSQL,
MySQL,
Pod permet de gnrer des documents ODF (odt, ods, ...) Il se base sur des templates dans les mme formats, dits l'aide d'OpenOffice. C'est trs confortable! Les variables python sont entres en mode change activable depuis le menu Edit / Changes / Records> Pod permet aussi de crer des tables et de faire des boucles en mettant du code python dans des notes Exemple: ./documents/pod*
41
Uno permet de
Piloter Open Office (tche de fond par exemple) D'utiliser des macros python dans OOo Gnration de documents bureautiques textes, tableur, ... Conversion de formats: word, excel, odt, ods, ... Production de PDF Diffs, extraction de texte (pour indexer p.ex.)
Exemples: ./documents/uno* || utilis pour OOo Zotero Plugin NB: python-ooolib permet crer des docs ODF sans open office
42
Les nouveaux plugins de The Gimp (le PhotoShop libre) sont en python! Alternative PIL: contrler ImageMagick: pythonpythonmagick
43
Matlab-like: matplotlib
Module: matplotlib Package Ubuntu: python-matplotlib URL: http://matplotlib.sourceforge.net/ Calcul scientifique, production de graphiques, et manipulaiton d'images. Matplotlib est trs puissant et rapide (compil en C). Il reprend de nombreux concepts, fonctionnalit, mots rservs et syntaxe de matlab! Exemples: ./matplotlib/*
44
Gaming ! SSH: Paramiko Son: sunau, pyao, etc. Hashs: Sha, md5 Bluetooth: lightblue, PyBluez Interfaces: Curses, WX, Gtk
Compression: Gzip, zlib, zipfile, tarfile Bioinformatique: Biopython Statistique: Rpy (pilotage de GNU R-project) Calculs symboliques: Sympy (primitive, rsolutions d'quations, simplifications, ...) Graphes (rseaux): neworkX
45
Bibus : logiciel de gestion de rfrences bibliographiques http://bibus-biblio.sourceforge.net/ Zotero: ref. biblio., Open Office Plugin http://www.zotero.org/support/word_processor_integration PyBliographer: ref. biblio., nombreuses formats, conversio http://pybliographer.org/ PyBibTex: Amlioratoin de BibTex en python (plus de formats, etc.) http://pybtex.sourceforge.net/ Calibre: managment d'ebooks http://calibre.kovidgoyal.net/ Bazaar :
versionning dcentralis, simple utiliser! Par Canonical (Ubuntu 9.04) http://bazaar-vcs.org/
MindRetrieve : search your personnal web http://www.mindretrieve.net/ PyMol : visualisation de molcules en 3D. http://pymol.sourceforge.net/
46
Lent: un interprteur excut par requte Pas pratique: peu (ou pas!) d'aide au dveloppement Rapide: diffrentes stratgies pour contourner le problme de CGI (NB: aussi plus rapide que PHP!) Mais peu d'outils d'aide au dveloppement Standardisation des ponts de bas niveau
(authentification/session, upload fichiers, connexion BD ...)
Nombreux serveurs compatible en python et Apache Les frameworks web sont tous compatibles WSGI
47
Il existe de nombreux frameworks web python dployables par WSGI. Il s'agit d'environnements de dveloppements complets.
Constitu d'lments fortement coupls (crits exprs) ORM (object relational mapping) puissant et simple utiliser Interface d'administration online (y.c. dition de donnes) Le templating ncessite peu de conaissances en python. GoogleAppEngine: http://code.google.com/appengine/ On peut choisir chaque composant (nombreuses possibilits) Et donc, trs puissant mais complexe matriser!
CherryPy -> cf. Skeletonz Zope (Commence se faire vieux et pas d'ORM) -> cf. Plone
48
Tutorial:
49
Applications portables (grce au WSGI) Dveloppement plus rapide, car aide intgre:
Authentification, internationalisation, file upload, gestion/validation de formulaires, templating des pages, ORM, RSS, envoi emails ...
http://pypi.python.org/pypi?%3Aaction=search&term=django&submit=search
Ex: wikis, blogging, micorblogging, registration, notification, avatars, smileys, visitor tracking, watermarking, version control, email-to-a-friend, ...
50
Que ce passe-il? Django cre le projet: monsite/ __init__.py manage.py settings.py urls.py
Signaleunpackagepython(estvide!) Outillingedecommandepourinteragiravec Django FichierdeconfigurationdeDjango
Tablesdesmatiresdusite(bassurdesRegExp)
51
52
Modle: traitement des donnes, etc. Vue: interface utilisateur = prsenter les donnes, etc. Contrleur: gestion des vnements + mj vue et modle
53
Voir fichier modle simplifi models-simple.py Cration de classes de donnes Object relationnal mapping:
Les classes correspondent aux tables SQL Leurs attributs correspondent aux colonnes
Assistantsdateetheures!
57
59
Les vues peuvent appeler des templates: Undicodevariables def login_view(request): Untemplate
return render_to_response('polls/login.html', {... vars ... })
Les templates servent prsenter, pas programmer: ce n'est pas la mme chose que l'on rencontre souvent en PHP (mlange de logique et prsentation, sauf phpmvc.net)!
De dfinir une hirarchie de templates (par hritage) D'y intgrer des variables, et de les reformater avec filtres De faire des boucles (for), des tests (if/else) ...
60
Exemple de template:
Unevariable
<html> <head><title>{{story.headline}}</title></head> <h1> {{story.headline|upper}} </h1> {% for paragraph in story.pagagraphs %} <p>{{paragraph}}</p> {% endfor %} </html>
Unebouclefor NB:iflemmegenredesytaxe
61
Valeurpardfaut Valeurderemplacement
62
63
http://127.0.0.1:8080/polls/restricted http://127.0.0.1:8080/polls/logout
64
from django import forms class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField() sender = forms.EmailField() cc_myself = forms.BooleanField(required=False)
65
67
Crer une vue et un template pour produire un formulaire d'upload qui ressemble cela:
<form action="URL_de_la_vue" method="post" enctype="multipart/form-data"> <input type="submit" value="Upload" /> </form>
Les fichiers uploads sont stocks dans 'request', donc crer un vue du style (attention la scurit!!):
defdirectupload(request): ifrequest['method']=='POST': if'file'inrequest.FILES: file=request.FILES['file'] filename=file['filename'] open('/chemin/stockage/' + filename,'w').write(file['content']) returnhttp.HttpResponseRedirect('une_URL_quelconque')
68
Ct python, on utilise simplejson. JSON est un format d'change, adapt au JavaScript La vue ajax_exemple (cf. views.py) Le toolkit AJAX Yahoo: http://developer.yahoo.com/yui/ La partie JavaScript: ./django/static/ajax_example_1.js
(Swisslib, Unilist)
http://localhost:8022
Vos questions?
GoogleAppEngine
Conclusion
OpenOfficeUNO
OpenOfficePlugin
BlenderPlugins
GimpPythonFu
72