J'encourage ceux qui ont le temps et l'envie à s'interesser au langage python et à la plate forme Zope, 100% open source.
Créer par Guido Van Rossum, Python est LE langage universel du moment.
Zope est un serveur d'application web écrit en Python et qui utilise Python.
Python et Zope ne réinventent pas l'informatique, c'est dans l'aisance et la rapidité qu'ils font la difference pour: créer un site dynamique, une interface graphique pour envoyer des fax, un gestionnaire de base de données etc...etc...
Je travaille sous Debian Sarge, je vous livre la méthode pour installer MySQL avec zope2.7, sous Mandrake celà devrait être plus simple, , je n'ai pas réussi l'install de MySQL sous Windows XP, par contre, Zope s'installe avec un simple EXE et il contient la base de donnée par défaut de Python : Gadfly.
apt-get install zope2.7
apt-get install mysql-client mysql-server mysql-common python-mysqldb
apt-get install zope-mysqlda # ce qui a pour effet d'installer zope 2.6, laisser faire...
copier : cp -rf /usr/lib/zope/lib/python/Products/ZMySQLDA /us/zope2.7/lib/python/Products
C'est tout ; Pour "tuer" zope 2.6:
mv /etc/rc2.d/S20zope /etc/rc2.d/K20zope
Pour démarrer zope2.7:
/var/lib/zope2.7/instance/bin/runzope
Pour faire plus court, ont peur copier .../runzope dans /usr/sbin, par exemple, ou écrire:
alias runzope=/var/lib/zope2.7/instance/bin/runzope dans /etc/profile, ainsi un simple "runzope" lance l'application.
Sous Windows, un simple double-clic sur l'icone.
Je vous livre si dessous un petit aide-mémoire python, très succint mais bien utile pour commencer.
Je mets prochainement sous licence GPL et en open-source, 3 petits exercices que j'ai réalisé et mis en production:
un compteur Internet pour Cybercafé, avec code coté serveur et coté clients. Une petite gestion hotellière et un "compositeur" de requetes SQL sur lequel je travaille.
Liens Python:
http://forum.hardware.fr/hardwarefr/Programmation/sujet-44982.htm
Memo Python:
--------------------------------------------
CHAINES:
--------------------------------------------
- Types de donnees:
string, integer et float (str, int, float)
a = "3" # string (chaine)
a = 3 # integer (entier)
- Operateurs mathematiques:
Note, a = b n'est pas un operateur math. mais une assignation de variable.
Note2, les operateurs sont utilisables pour des tri alphabetiques.
a == 10 # egalite mathematique
a != b # different de
a > b # plus grand que
a < b # plus petit que
a >= b # plus grand ou egal
a <= b # plus petit ou egal
- Concatenation: chaine + autre_chaine
- Repetition: chaine * <entier>
- Index: chaine[n°index]
- Recherche d'un caractère:
ch = "Chaine a traiter"
caractere = "e"
longueur_chaine = len(ch)
i = 0
flag = 0
while i < longueur_chaine
if ch[i] == caractere
flag = 1
i = i + 1
print " Le caractere ", caractere
if t == 1:
print "est présent"
else:
print "est absent"
- Inversion d'une chaine:
ch = "zorglub"
lc = len(ch)
i = lc - 1
nch = ""
while i >= 0:
nch = nch + ch[i]
i = i - 1
print nch
- Methodes des chaines
ch.upper() # tranforme en majuscule tous les car.
ch.lower() # transforme en minuscule tous les car.
ch.capitalize() # transforme en majuscule le premier car. de la chaine.
ch.replace('car1','car2') # remplace le car. ou sous-chaine "car1" par "car2"
a = 'a b c'
a.replace('b', 'z')
a
'a z c'
------------------------------------------
LISTES:
------------------------------------------
- Transformer une liste en chaine:
a = ['a','b','c']
ch = ""
for i in a:
ch = ch + i
print ch
abc
- Transformer une liste en chaine avec join: # join: ceci est la bonne syntaxe!
a = ['a,'b','c']
" ".join(a) # avec un separateur whitespace
'a b c'
";".join(a) # avec un separateur car
'a;b;c'
- Transformer une chaine en liste avec split:
a = 'a b c'
a.split() # par defaut, \w est le separateur
['a','b','c']
- Explosion d'une chaine en liste, en fonction d'un separateur:
a = 'a;b;c'
a.split(';') # Note: le separateur est supprime
['a','b','c']
# autre syntaxe:
import re
re.split(';',a)
['a','b','c']
- Remplacement d'une tranche d'elements:
a = ['a','b','c','d','e','f']
a[2:5] = []
a
['a','b','f']
- Combinaison de 2 listes en une:
t1 = [31,28,31,30,31,30,31,31,30,31,30,31]
t2 = ['janvier','fevrier,'mars','avril','mai','juin','juillet'
,'aout','septembre','octobre','novembre','decembre']
t3 = []
i = 0
while i < len(t1):
t3.append(t2[i])
t3.append(t1[i])
i = i + 1
print t3
- indicer tous les elements d'une liste:
a = ['a','b','c']
for i in range(len(a)):
print i, a[i]
0 a
1 b
2 c
- Methodes des listes:
range(x) # renvoit une liste croissante d'entiers de 0 a x-1
range(10)
[ 0,1,2,3,4,5,6,7,8,9 ]
range(x,y) # renvoit une liste croissante d'entier de x a y-1
range(5,8)
[ 5,6,7 ]
append(x) # insere x en fin de liste [equiv. a: li.insert(len(a), x) ]
ex: a.append('toto') ['a','b','c','toto']
index(x) # Retourne le N° d'ndex de x, dans la liste
del(a[i]) # supprime l'element d'index i, contenu dans la liste a (pas d'affichage).
pop(i) # Affiche et supprime, l'element d'index i, ex:
a = ['a','b','c']
a.pop(1)
'b'
a
['a','c']
remove(x) # Supprime le premier element de valeur x, dans la liste, ex:
a = ['a','b','c']
a.remove('c')
a
['a','b']
count(x) # renvoi le nombre de fois que x apparait dans la liste.
sort() # Trie les elements dans la liste, (tri alphanumerique), ex:
a = ['c','b','a']
a.sort()
a
['a','b','c']
a = ['12','3','0']
a.sort()
a
['0','12','3'] # Note: le tri se base sur le PREMIER car. de l'element.
reverse() # Inverse l'ordre des elements dans la liste.
---------------------------------------------------
TUPLES
---------------------------------------------------
liste = ['a','b','c']
tuple = ('a','b','c')
---------------------------------------------------
DICTIONNAIRE
---------------------------------------------------
Les elements sont indices par une clef
dico = {'clef1' : 'element1', 'clef2': 'element2'}
print dico.keys() # renvoi les clefs dans une liste
['clef1','clef2']
print dico.values() # renvoi les elements dans une liste
dico.items # renvoi une liste equivalente de tuples
has_key() udentifie par true or false la presence d'une clef:
if a.has_key('clef1'):
print "ok"
- Copy d'un
Dictionnaire:
b = a.copy()
----------------------------------------------------
RegExp
----------------------------------------------------
-Definitions:
\w # N'importe quel car. alphanumerique, e.g [a-zA-Z0-9_]
\W # N'importe quel car. NON-alphanum. , e.g [^a-zA-Z0-9_]
\d # N'importe quel car. decimal, e.g [0-9]
\D # N'importe quel car. NON-decimal, eg [^0-9]
\s # N'importe quel whitespace, e.g [ \t\n\r\f\v]
\S # N'importe quel NON-whitespace car. e.g [^ \t\n\r\f\v]
re.compile('.+') # Tout
('.{0,}.') # Tout
('\S+') # Toutes les chaines, SAUF les espaces.
('ch1 | ch2') # ch1 ET ch2
- lookahead assertions:
TODO
- Examples:
import re
a = open('/var/log/ulog/syslogemu.log','r').read()
a = str(a)
i = "192.168.0.2"
RegExp = "(.*\s\d+:\d+).+(%s)" % i
p = re.compile(regexp)
p.findall(a)
[('Sep 5 15:06', '192.168.0.2'), ...]
### A tester: b = p.findall(a) b = " ,".join(b)
------------------------------------------------------
FICHIERS
------------------------------------------------------
f = open('fichier', 'r') # r = lecture, w = ecriture
f.read() # renvoit TOUS le fichier
f.read(x) # renvoit x premieres ligne du fichier
f.readline() # renvoit la PREMIERE ligne du fichier
f.readlines() # renvoit tout le fichier dans une liste, chaque lignecorrespond à un element et finit par "\n".
f.write('chaine') # ecrit <chaine> dans le fichier et ECRASE le contenu.
f.close() # fermeture du fichier et validation des ecritures.