Transciption du Déroulement de l'Atelier

francis.ngatsi a rejoint le salon 11:57 davin.baragiotta a rejoint le salon 12:33 franck.kouyami a rejoint le salon 12:42

davin.baragiotta 27/08/2012 12:45:21 test ok ça marche 27/08/2012 12:45:24

arnaud.amelina@auf.org 27/08/2012 12:45:47 C'est bon 27/08/2012 12:45:50 darko.stanar a rejoint le salon 12:46 doan.manh.ha a rejoint le salon 12:47 shafeek.sumser a rejoint le salon 12:47 patrick.mwamba a rejoint le salon 12:49 photo-valentin.kouadio@auf.org a rejoint le salon 12:51

photo-valentin.kouadio@auf.org 27/08/2012 12:51:43 salut couz abrosine2 a rejoint le salon 12:51 Tri a rejoint le salon 12:52

arnaud.amelina@auf.org 27/08/2012 12:52:39 Salut les Couz soyez tousles bienvenues 27/08/2012 12:52:47 chanesakhone.chitsaya a rejoint le salon 12:52

Tri 27/08/2012 12:52:49 bonjour mesdames et messieurs

arnaud.amelina@auf.org 27/08/2012 12:52:59 Saluto

doan.manh.ha 27/08/2012 12:53:04

patrick.mwamba 27/08/2012 12:53:15 Bonjour

davin.baragiotta 27/08/2012 12:53:26 eheh!

abrosine2 27/08/2012 12:53:31 Bonjour à tous

arnaud.amelina@auf.org 27/08/2012 12:53:50 Ben tu vois Davin finalement on a du monde shafeek.sumser a quitté la salle 12:53 sekou.diall a rejoint le salon 12:53

arnaud.amelina@auf.org 27/08/2012 12:54:01 et ça continue

photo-valentin.kouadio@auf.org 27/08/2012 12:54:05 yep

sekou.diall 27/08/2012 12:54:24 Salut à tous

davin.baragiotta 27/08/2012 12:54:53 arnaud.amelina@auf.org: "en sale!"

chanesakhone.chitsaya 27/08/2012 12:54:58 bj à tous

davin.baragiotta 27/08/2012 12:55:09 wow, ça va être cool tout ça

arnaud.amelina@auf.org 27/08/2012 12:55:12 Ouep

davin.baragiotta 27/08/2012 12:55:24 j'espère que tout ce monde va rester pour l,atelier git qui suit après! (coup de pub) 27/08/2012 12:55:27 david.violette a rejoint le salon 12:55

david.violette 27/08/2012 12:56:16 bonjour tout le monde

doan.manh.ha 27/08/2012 12:56:52 salut david

arnaud.amelina@auf.org 27/08/2012 12:57:01 Saluto David emmanuel.tagne-tagne a rejoint le salon 12:57

arnaud.amelina@auf.org 27/08/2012 12:57:39 on aura le grand Patron parmi nous

davin.baragiotta 27/08/2012 12:58:19 ah non désolé, monsieur Cerquiglini s'est excusé 27/08/2012 12:58:21 victor.bruneau a rejoint le salon 12:58

arnaud.amelina@auf.org 27/08/2012 12:58:40

Il sera valablement représenté 27/08/2012 12:58:50 christine.legris a rejoint le salon 12:58

davin.baragiotta 27/08/2012 12:59:03 ahaha

victor.bruneau 27/08/2012 12:59:23 Salut à tous

arnaud.amelina@auf.org 27/08/2012 12:59:37 Voilà celui qui a été annoncé tran.xuan.huy a rejoint le salon 13:00

arnaud.amelina@auf.org 27/08/2012 13:00:11 Bievenue à Monsieur le représentant de Monsieur Cerquiglini

victor.bruneau 27/08/2012 13:00:18

arnaud.amelina@auf.org 27/08/2012 13:00:26

davin.baragiotta 27/08/2012 13:00:39 9h00 : coup d'envoi arnaud.amelina@auf.org, victor.bruneau : un mot d'intro? 27/08/2012 13:00:53

victor.bruneau 27/08/2012 13:01:00 oui, rapide

arnaud.amelina@auf.org 27/08/2012 13:01:13 Il est l'heure

victor.bruneau 27/08/2012 13:01:32 un petit mot pour remercier le comité d'organisation

arnaud.amelina@auf.org 27/08/2012 13:01:43

victor.bruneau 27/08/2012 13:01:49 qui a fait unbon boulit (sinon on serait pas là) merci aussi à ceux qui vont faire les ateliers 27/08/2012 13:02:20 et à tous participants 27/08/2012 13:02:33 BONNE SEMAINE TECH 2012 27/08/2012 13:02:42 C'est parti 27/08/2012 13:02:51 à toi davin.baragiotta 27/08/2012 13:02:59

arnaud.amelina@auf.org 27/08/2012 13:03:01 Merci Grand Boss

davin.baragiotta 27/08/2012 13:03:31 ok avant de commencer rappel de procédure comme arnaud disait 27/08/2012 13:03:36 dans CE salon, c,est l,atelier 27/08/2012 13:03:44

   1 les discussions et questions, pour laisser le discours fluide : dans salon tech svp 27/08/2012 13:04:00
   2 -------------------- DÉBUT : Atelier Python ------------------ 27/08/2012 13:04:07
   3 Bonjour à tous 27/08/2012 13:04:23
   4 vous devriez avoir 3 écrans ouverts 27/08/2012 13:04:32
   5 1. cette fenêtre 27/08/2012 13:04:37
   6 2. un navigateur 27/08/2012 13:04:43
   7 3. un interpréteur 27/08/2012 13:04:47
   8 (terminal je veux dire) 27/08/2012 13:04:53
   9 http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012 27/08/2012 13:05:02
  10 premier atelier = Python 27/08/2012 13:05:08
  11 voici la page présentation : 27/08/2012 13:05:13
  12 http://wiki.auf.org/wikiteki/Projet/SemaineTech/2012/Ateliers/Python 27/08/2012 13:05:17
  13 je prends pour acquis que vous avez tout ce qu'il faut d'installer 27/08/2012 13:05:28
  14 si vous n'avez pas iPython : pas grave, on va faire sans 27/08/2012 13:05:38
  15 tout le contenu est ici : 27/08/2012 13:05:54
  16 http://wiki.auf.org/wikiteki/Ateliers/Python/Base/Support 27/08/2012 13:05:54
  17 je vous demande donc de garder cette page ouvert... c'est le plan de match 27/08/2012 13:06:07
  18 INTRODUCTION 27/08/2012 13:06:11
  19 notre but dans cet atelier 27/08/2012 13:06:20
  20 c'est de mettre les mains dans python 27/08/2012 13:06:29
  21 on va coder 27/08/2012 13:06:33
  22 d,abord interactivement... dans l'interpréteur 27/08/2012 13:06:43
  23 ensuite on va mettre ce qui nous intéresse dans un script 27/08/2012 13:06:53
  24 (un fichier) 27/08/2012 13:06:55
  25 qu'on va exécuter 27/08/2012 13:07:00
  26 vous avez la documentation officielle en lien 27/08/2012 13:07:13
  27 elle a un tutoriel 27/08/2012 13:07:20
  28 peut-être un peu long 27/08/2012 13:07:24
  29 et aussi, la doc de la "standard library" 27/08/2012 13:07:38
  30 c'est à dire de ce qui vient par défauit avec Python 27/08/2012 13:07:49
  31 vous devez avoir un éditeur texte aussi 27/08/2012 13:08:01
  32 vi, emacs... peu importe... moi j'utilise gedit 27/08/2012 13:08:12
  33 (et je n'ai pas honte  ) 27/08/2012 13:08:17
  34 bon, c'est parti 27/08/2012 13:08:27
  35 dans votre terminal, lancez l'interpréteur ipython 27/08/2012 13:08:43
  36 (ou python pour ceux qui ne l'ont pas) 27/08/2012 13:08:49
  37 s'agit juste de taper :
  38 python
  39 ou
  40 ipython 27/08/2012 13:09:01
  41 fawaz.tairou a rejoint le salon 13:09   
  42 
  43 davin.baragiotta 27/08/2012 13:09:24
  44 ce qui est super avec python
  45 c'est sa simplicité 27/08/2012 13:09:29
  46 puissant... mais simple 27/08/2012 13:09:33
  47 simplicité d'abord dans la syntaxe 27/08/2012 13:09:43
  48 frumence.boroto a rejoint le salon 13:09        
  49 
  50 davin.baragiotta 27/08/2012 13:09:58
  51 ah... un mot sur les interpréteurs... rapide
  52 un interpréteur écoute le code que tu saisies et retournes la valeur associé à l'exécution 27/08/2012 13:10:17
  53 dans ipython c'est écrit "In"... pour input 27/08/2012 13:10:30
  54 et ça retourne "Out" pour output de l'exécution 27/08/2012 13:10:40
  55 commence par instancier une variable avec un entier 27/08/2012 13:11:01
  56 a = 12 27/08/2012 13:11:03
  57 ça retourne rien... 27/08/2012 13:11:13
  58 si on saisit ensuite "a" 27/08/2012 13:11:21
  59 ça retourne 12 27/08/2012 13:11:28
  60 toutes nos instructions restent en mémoire dans interpréteur... 27/08/2012 13:11:44
  61 on va tester la syntaxe d'un commentaire 27/08/2012 13:11:51
  62 c'est 1 27/08/2012 13:11:53
  63 oups 27/08/2012 13:11:54
  64 ''#'' 27/08/2012 13:11:56
  65 ''# ceci est un commentaire ''27/08/2012 13:12:01
  66 ça fait rien 27/08/2012 13:12:04
  67 ça pas de /* */ 27/08/2012 13:12:15
  68 en python 27/08/2012 13:12:18
  69 ni de // 27/08/2012 13:12:20
  70 aussi, vous avez remarqué qu'on ne met pas de $ devant la variable 27/08/2012 13:12:37
  71 fianlement... pas de ; en fin de ligne 27/08/2012 13:12:53
  72 ça fait du code plus facile à lire 27/08/2012 13:13:03
  73 ah oui... pas besoin non plus des {} pour les blocs de code 27/08/2012 13:13:22
  74 donc une fonctino (on y reviendra) ça s'écrit comme ça : 27/08/2012 13:13:35
  75 def coucou():
  76 return 27/08/2012 13:13:44
  77 très important : c'est l'indentation qui nous dispense des {} 27/08/2012 13:14:04
  78 en Python l'indentation est obligatoire 27/08/2012 13:14:11
  79 par convention... on utilise 4 espaces... 27/08/2012 13:14:23
  80 *pas* des tabs.... 4 espaces 27/08/2012 13:14:29
  81 niry.andriambelo a rejoint le salon 13:14       
  82 
  83 davin.baragiotta 27/08/2012 13:14:44
  84 configurez votre éditeur pour transformer les tabs en 4 espaces
  85 pour terminer avec la syntaxe... : il existe une "stylistique" pythonesque 27/08/2012 13:15:12
  86 pour rendre le code plus lisible 27/08/2012 13:15:17
  87 calin.dordia a rejoint le salon 13:15   
  88 
  89 davin.baragiotta 27/08/2012 13:15:27
  90 ce sont des recommandations (largement suivies)
  91 PEP8 27/08/2012 13:15:37
  92 http://www.python.org/dev/peps/pep-0008/ 27/08/2012 13:15:45
  93 vous pouvez y jeter un oeil pendant qu'on récolte les questions dans salon tech 27/08/2012 13:16:01
  94 des questions? 27/08/2012 13:16:07
  95 calin.dordia a quitté la salle 13:16    
  96 
  97 davin.baragiotta 27/08/2012 13:16:36
  98 ok, pas de nouvelles... bonnes nouvelles (en même temps opn a rien fait encore)
  99 variables : 27/08/2012 13:16:43
 100 les variables sont des "noms" qui font "référence" à une "valeur" 27/08/2012 13:17:06
 101 ex.: 27/08/2012 13:17:08
 102 a = 12 27/08/2012 13:17:11
 103 b = a 27/08/2012 13:17:15
 104 (on dit que b prend la valeur de a) 27/08/2012 13:17:31
 105 avec la fonction "buiklt-in" id() 27/08/2012 13:17:41
 106 on va vérifier l'emplacement mémoire des valeurs 27/08/2012 13:17:51
 107 id(a) 27/08/2012 13:17:55
 108 id(b) 27/08/2012 13:17:57
 109 on voit que c'est identique... donc : 27/08/2012 13:18:04
 110 les noms "a" et "b" pointent vers la même chose 27/08/2012 13:18:15
 111 parlons maintenant des types 27/08/2012 13:18:26
 112 quand on programme on manipule de l'info... et l'info est typée... car on veut pas faire la même chose avec des entiers et des chaines de caractères 27/08/2012 13:18:52
 113 voyons les types de base en Python 27/08/2012 13:19:01
 114 (tapez dans votre terminal en même temps) 27/08/2012 13:19:09
 115 None est un nom réservé qui veut dire "rien"... 27/08/2012 13:19:26
 116 comme NULL dans les bases de données 27/08/2012 13:19:35
 117 on a aussi les booléens ; False et True 27/08/2012 13:19:45
 118 les majuscules sont importantes ici 27/08/2012 13:19:52
 119 none, false, true : ça n'existe pas 27/08/2012 13:19:59
 120 dans le numérique on a les entiers : 27/08/2012 13:20:14
 121 15 27/08/2012 13:20:16
 122 et aussi les float... pour le décimal : 15.5 27/08/2012 13:20:27
 123 évidemment, pas de virgule... un point 27/08/2012 13:20:35
 124 on a les chaînes de caractères : string et unicode... 27/08/2012 13:20:47
 125 c'est bon de savoir que c'est 2 choses différentes... 27/08/2012 13:21:04
 126 je vous passe le détail sur les encodages 27/08/2012 13:21:19
 127 mais pour déclarer une chaine unicode (soyons modernes) 27/08/2012 13:21:31
 128 il faut mettre le u devant les apostrophes (quote) 27/08/2012 13:21:43
 129 u"" 27/08/2012 13:21:46
 130 ça peut aussi être des single quote 27/08/2012 13:21:53
 131 u'' 27/08/2012 13:21:55
 132 il existe aussi les chaînes "raw" (brutes) : r"" 27/08/2012 13:22:12
 133 on verra ça dans django 27/08/2012 13:22:17
 134 .... 27/08/2012 13:22:25
 135 avec ça... on a la base... 27/08/2012 13:22:34
 136 après ce qui est intéressant... c'est de créer des structures de données 27/08/2012 13:22:49
 137 ex.: j'ai un prénom et un nom, moi... 27/08/2012 13:23:00
 138 je voudrais manipuler les 2 dans un objet personne... 27/08/2012 13:23:15
 139 premier type de structure, ou conteneur d'info : 27/08/2012 13:23:27
 140 les listes 27/08/2012 13:23:30
 141 l = [] 27/08/2012 13:23:34
 142 ça c'est une liste vide 27/08/2012 13:23:39
 143 comme en math, pour déclarer des éléments, on met des virgules 27/08/2012 13:23:51
 144 l = [1,2,3] 27/08/2012 13:23:57
 145 liste ayant 3 entiers comme éléments 27/08/2012 13:24:07
 146 la liste est ordonnée... on y reviendra dans un instant 27/08/2012 13:24:28
 147 (c,est pas un sac de valeur... y,a un ordre) 27/08/2012 13:24:38
 148 t = tuple = () 27/08/2012 13:24:43
 149 c'est exactement comme une liste... sauf c'est immuable 27/08/2012 13:24:54
 150 si on peut ajouter un élément à une liste : 27/08/2012 13:25:01
 151 l.append(4) 27/08/2012 13:25:08
 152 on ne peut pas avec un tuple... 27/08/2012 13:25:14
 153 ça sert à quoi? principalement pour des raisons de performance... et on le voit partout 27/08/2012 13:25:31
 154 donc retenir que () = tuple 27/08/2012 13:25:40
 155 exemple : 27/08/2012 13:25:42
 156 t = (1,2,3,4) 27/08/2012 13:25:48
 157 c'est un tuple de 4 éléments (tous entiers) 27/08/2012 13:25:57
 158 balla.fall a rejoint le salon 13:26     
 159 
 160 davin.baragiotta 27/08/2012 13:26:14
 161 finalement, la dernière structure c'est un "dictionnaire"
 162 c'est un peu comme un array dans d'autres langages 27/08/2012 13:26:25
 163 syntaxe de dictionnaire vide : 27/08/2012 13:26:36
 164 d = {} 27/08/2012 13:26:40
 165 le dictionnaire stocke des associations clé-valeur 27/08/2012 13:26:56
 166 la clé DOIT être unique... 27/08/2012 13:27:06
 167 un peu comme une entrée dans un dictionnaire 27/08/2012 13:27:15
 168 ex.: 27/08/2012 13:27:19
 169 d = {
 170 'prenom':'Davin',
 171 'nom':'Baragiotta',
 172 } 27/08/2012 13:27:51
 173 un dictionnaire avec 2 clés (prenom et nom) 27/08/2012 13:28:06
 174 ayant respectivement les valeurs 'Davin' et 'Baragiotta' (des strings) 27/08/2012 13:28:24
 175 finalement... les ensembles.... dernier type 27/08/2012 13:28:39
 176 un ensemble, au sens mathématique est une collection non ordonnée d'éléments unique 27/08/2012 13:28:59
 177 on crée un ensemble (set en anglais) en utilisant set() sur une collection (liste, tuple, dictionnaire) 27/08/2012 13:29:26
 178 jouons. 27/08/2012 13:29:32
 179 créer la liste : 27/08/2012 13:29:37
 180 l = [1,2,3,3,3,4,5,5] 27/08/2012 13:29:48
 181 shafeek.sumser a rejoint le salon 13:29 
 182 
 183 davin.baragiotta 27/08/2012 13:29:59
 184 comptons les éléments
 185 8 27/08/2012 13:30:05
 186 len(l) 27/08/2012 13:30:09
 187 eric.mcsween a rejoint le salon 13:30   
 188 
 189 davin.baragiotta 27/08/2012 13:30:24
 190 len = length... fonction built-in (on y revient)
 191 maintenant... on en fait un ensemble : 27/08/2012 13:30:33
 192 e = set(l) 27/08/2012 13:30:36
 193 len(e) 27/08/2012 13:30:43
 194 5 27/08/2012 13:31:05
 195 en tapant seulement "e" dans l'interpréteur 27/08/2012 13:31:18
 196 il vous retourne les valeurs de l'ensemble 27/08/2012 13:31:29
 197 e 27/08/2012 13:31:32
 198 
 199 In [8]: e
 200 Out[8]: set([1, 2, 3, 4, 5])
 201 27/08/2012 13:31:40
 202 on vient bien qu'un ensemble est non redondant... 27/08/2012 13:31:51
 203 questions? 27/08/2012 13:31:55
 204  
 205 arnaud.amelina@auf.org 27/08/2012 13:32:22
 206 n/a     
 207 
 208 davin.baragiotta 27/08/2012 13:32:29
 209 ok on continue
 210 python offre des raccourcis sympas 27/08/2012 13:32:43
 211 suppons que vous avez des valeurs dans un tuple : 27/08/2012 13:32:53
 212 t = (34,56) 27/08/2012 13:33:03
 213 disons que ce soit des coordonnées d'un piont dans l'espace... 27/08/2012 13:33:14
 214 x et y quoi! 27/08/2012 13:33:18
 215 et qu'on veuille manipuler x et y indépendamment 27/08/2012 13:33:32
 216 on peut faire simple ceci : 27/08/2012 13:33:37
 217 chamback.pierre a rejoint le salon 13:33        
 218 
 219 davin.baragiotta 27/08/2012 13:33:53
 220 x, y = t
 221 (euh je crois que je me trompe... faut unpacker, minute) 27/08/2012 13:34:07
 222 ah si ça marche 27/08/2012 13:34:34
 223 
 224 In [10]: t = (34,56)
 225 
 226 In [11]: x, y = t
 227 
 228 In [12]: x
 229 Out[12]: 34
 230 
 231 In [13]: y
 232 Out[13]: 56
 233 27/08/2012 13:34:46
 234 c'est ce qu'on appelle unpacker (ou packer, dans le sens inverse, si je ne me trompe) 27/08/2012 13:35:03
 235 python est un langage fortement typé 27/08/2012 13:35:20
 236 c,est à dire qu'on ne fait pas n'importe quoi avec les variables... 27/08/2012 13:35:32
 237 si a est un entier (a = 15) 27/08/2012 13:35:40
 238 alors c'est un entier... je peut pas, par exemple, le concaténer avec une chaine de caractère 27/08/2012 13:35:57
 239 'davin' + 5 27/08/2012 13:36:02
 240 ça n'a pas de sens en Python... 27/08/2012 13:36:07
 241 il ne va pas faire comme en PHP et dire "aaaah... tu voudrais que 5 soit un string?" 27/08/2012 13:36:26
 242 et donner : 'davin5' 27/08/2012 13:36:30
 243 fortement typé donc... 27/08/2012 13:36:40
 244 louis-beethoven.montrose a rejoint le salon 13:36       
 245 
 246 davin.baragiotta 27/08/2012 13:36:55
 247 ça veut dire que si on veut changer de type, faut le faire explicitement
 248 avec des opérateurs pour ça : 27/08/2012 13:37:00
 249 str(5) 27/08/2012 13:37:04
 250 
 251 In [16]: cinq = str(5)
 252 
 253 In [17]: type(cinq)
 254 Out[17]: <type 'str'>
 255 27/08/2012 13:37:36
 256 type() = autre fonction built-in (qui vient par défaut)... ça donne le type de la variable 27/08/2012 13:37:58
 257 on voit que la variable nommé "cinq" est un str après la transformation de 5 par str() 27/08/2012 13:38:21
 258 c'est ce qu'on appelle le "transtypage" 27/08/2012 13:38:34
 259 mais vous aurez remarqué 27/08/2012 13:38:41
 260 que python est dynamqieu 27/08/2012 13:38:56
 261 pas besoin de déclarer les variables et leur type 27/08/2012 13:39:05
 262 
 263 a = int()
 264 a = 5 27/08/2012 13:39:13
 265 première ligne est inutile 27/08/2012 13:39:21
 266 bon on n'a rien fait de rigolo... mais on a vu la base 27/08/2012 13:39:33
 267 Built-in : les fonctions 27/08/2012 13:39:45
 268 http://docs.python.org/library/fonctions.html 27/08/2012 13:39:50
 269 dans la doc officielle... on voit toutes les fonctions de base 27/08/2012 13:40:01
 270 y'en a pas beaucoup vous me direz... 27/08/2012 13:40:15
 271 mais c'est parce que Python travaille plus avec des objets 27/08/2012 13:40:31
 272 comme Java, par exemple 27/08/2012 13:40:36
 273 dans les fonctions de pas 27/08/2012 13:40:43
 274 j'en ai énuméré quelques unes d'utile 27/08/2012 13:40:57
 275 certaines qu'on a déjà vu : 27/08/2012 13:41:07
 276 type() 27/08/2012 13:41:10
 277 int(), str().... 27/08/2012 13:41:19
 278 len() 27/08/2012 13:41:21
 279 on les apprendra pas par coeur : faut juste savoir où elles sont définies dans la doc 27/08/2012 13:41:36
 280 dernier point de théorie et ensuite on s'amuse 27/08/2012 13:41:55
 281 Objets et namespaces... 27/08/2012 13:42:04
 282 en Python TOUT est un objet... 27/08/2012 13:42:13
 283 un objet (en programmation orienté-objet) c'est rien d,autre qu'une strucutre de données 27/08/2012 13:42:30
 284 un peu comme nos dictionnaires : d = {} 27/08/2012 13:42:45
 285 un objet a donc "de l'information sur lui"... un peu comme on peut vous demander votre nom, vos études, vos jobs passées 27/08/2012 13:43:22
 286 on peut interroger un objet 27/08/2012 13:43:27
 287 on l'interroge en appelant des "attributs" 27/08/2012 13:43:47
 288 ce sont des varaibles sur l'objet 27/08/2012 13:43:52
 289 ou 27/08/2012 13:43:53
 290 en appelant des "méthodes" 27/08/2012 13:43:59
 291 se sont des fonctions sur l'objet 27/08/2012 13:44:08
 292 les "attributs" et les "méthodes" ont tous des "noms" 27/08/2012 13:44:27
 293 namespaces : ce sont des noms qui vivient dans "l'ESPACE" de l'objet 27/08/2012 13:44:45
 294 on puorrait dire "derrière lui" 27/08/2012 13:44:52
 295 exemple : 27/08/2012 13:44:58
 296 on va prendre une chaine de caractère : 27/08/2012 13:45:09
 297 prenom = "Davin" 27/08/2012 13:45:14
 298 avec ipython 27/08/2012 13:45:23
 299 on accède aux "noms derrière la chaîne de caractère" 27/08/2012 13:45:35
 300 en utilisant le poibnt : . 27/08/2012 13:45:41
 301 suivi d'un tab : 27/08/2012 13:45:46
 302 
 303 In [18]: prenom = "Davin"
 304 
 305 In [19]: prenom.
 306 prenom.__add__ prenom.__repr__ prenom.istitle
 307 prenom.__class__ prenom.__rmod__ prenom.isupper
 308 prenom.__contains__ prenom.__rmul__ prenom.join
 309 prenom.__delattr__ prenom.__setattr__ prenom.ljust
 310 prenom.__doc__ prenom.__sizeof__ prenom.lower
 311 prenom.__eq__ prenom.__str__ prenom.lstrip
 312 prenom.__format__ prenom.__subclasshook__ prenom.partition
 313 prenom.__ge__ prenom._formatter_field_name_split prenom.replace
 314 prenom.__getattribute__ prenom._formatter_parser prenom.rfind
 315 prenom.__getitem__ prenom.capitalize prenom.rindex
 316 prenom.__getnewargs__ prenom.center prenom.rjust
 317 prenom.__getslice__ prenom.count prenom.rpartition
 318 prenom.__gt__ prenom.decode prenom.rsplit
 319 prenom.__hash__ prenom.encode prenom.rstrip
 320 prenom.__init__ prenom.endswith prenom.split
 321 prenom.__le__ prenom.expandtabs prenom.splitlines
 322 prenom.__len__ prenom.find prenom.startswith
 323 In [19]: prenom.
 324 27/08/2012 13:46:06
 325 ahaha! 27/08/2012 13:46:12
 326 on vient de découvrir plein de truc "sur" (ou derrière) ma chapine de caractère... 27/08/2012 13:46:30
 327 ce sont les noms des attributs et méthodes 27/08/2012 13:46:37
 328 notre but dans la vie 27/08/2012 13:46:50
 329 c'est de "faire des trucs" avec notre information 27/08/2012 13:47:00
 330 c'est ça programmer... 27/08/2012 13:47:04
 331 là, on se rend compte que Python nous donne plein de fonction directement sur l'objet... 27/08/2012 13:47:27
 332 startswith... hmmm 27/08/2012 13:47:36
 333 qu'est-ce que ça peut bien faire? 27/08/2012 13:47:44
 334 on va continuer notre "introspection" de l'objet en appelant l'aide 27/08/2012 13:48:00
 335 ipython : 
 336 prenom.startswith? 27/08/2012 13:48:18
 337 (si vous avez trop de noms et voulez sortir de la liste : q pour quit) 27/08/2012 13:48:51
 338 
 339 In [20]: prenom.startswith?
 340 Type:    builtin_function_or_method
 341 Base Class:     <type 'builtin_function_or_method'>
 342 String Form:    <built-in method startswith of str object at 0x967d940>
 343 Namespace:      Interactive
 344 Docstring:
 345 S.startswith(prefix[, start[, end]]) -> bool
 346 
 347 Return True if S starts with the specified prefix, False otherwise.
 348 With optional start, test S beginning at that position.
 349 With optional end, stop comparing S at that position.
 350 prefix can also be a tuple of strings to try.
 351 27/08/2012 13:49:07
 352 ok donc on tombe direct sur la documentation de la méthode "startswith"! 27/08/2012 13:49:33
 353 testons maitenant! 27/08/2012 13:49:45
 354 on comprend que startswith nous dit si le string commence avec un prefix particulier : 27/08/2012 13:50:13
 355 prenom.startswith('W') 27/08/2012 13:50:21
 356 
 357 In [21]: prenom.startswith('W')
 358 Out[21]: False
 359 27/08/2012 13:50:34
 360 la méthode nous retourne False... non 'Davin' ne commence pas avec 'W' 27/08/2012 13:50:47
 361 
 362 In [22]: prenom.startswith('D')
 363 Out[22]: True
 364 27/08/2012 13:50:57
 365 ça peut sembler trivial... 27/08/2012 13:51:07
 366 mais on fait de l'introspection et ça vous permet : 27/08/2012 13:51:16
 367 de découvrir tout ce que vous pouvez faire avec python 27/08/2012 13:51:27
 368 dans votre interpréteur.... 27/08/2012 13:51:38
 369 quand vous avez bien exploré ce que vous pouviez faire : coder le résultat finale du traitement que vous voulez 27/08/2012 13:52:01
 370 dans un script! 27/08/2012 13:52:04
 371 on y arrive 27/08/2012 13:52:07
 372 regardons rapido ce que les listes et dictionnaires ont dans le ventre 27/08/2012 13:52:23
 373 par exemple 27/08/2012 13:52:28
 374 
 375 In [23]: l = [1,2,3]
 376 
 377 In [24]: l.
 378 l.__add__ l.__ge__ l.__iter__ l.__repr__ l.append
 379 l.__class__ l.__getattribute__ l.__le__ l.__reversed__ l.count
 380 l.__contains__ l.__getitem__ l.__len__ l.__rmul__ l.extend
 381 l.__delattr__ l.__getslice__ l.__lt__ l.__setattr__ l.index
 382 l.__delitem__ l.__gt__ l.__mul__ l.__setitem__ l.insert
 383 l.__delslice__ l.__hash__ l.__ne__ l.__setslice__ l.pop
 384 l.__doc__ l.__iadd__ l.__new__ l.__sizeof__ l.remove
 385 l.__eq__ l.__imul__ l.__reduce__ l.__str__ l.reverse
 386 l.__format__ l.__init__ l.__reduce_ex__ l.__subclasshook__ l.sort
 387 27/08/2012 13:52:48
 388 sort... tient on peut trier une liste... normal c'est ordonné... 27/08/2012 13:53:03
 389 remove, ok on comprend sans lire la doc que c'est pour enlever un élément 27/08/2012 13:53:18
 390 on teste rapido voir si on est pas trop fou : 27/08/2012 13:53:25
 391 l.remove(2) 27/08/2012 13:53:32
 392 
 393 In [24]: l.remove(2)
 394 
 395 In [25]: l
 396 Out[25]: [1, 3]
 397 27/08/2012 13:53:44
 398 ouais ok c'est ce qu'on pensait 27/08/2012 13:53:50
 399 reverse : eh oui, retourne la liste de sens 27/08/2012 13:54:06
 400 .insert... ah, y,a insert et append... 27/08/2012 13:54:19
 401 c'est quoi la différence? 27/08/2012 13:54:24
 402 solution : lire la doc 27/08/2012 13:54:31
 403 27/08/2012 13:54:31
 404 l.append? 27/08/2012 13:54:35
 405 l.insert? 27/08/2012 13:54:40
 406 pour ceux qui n'ont pas ipython 27/08/2012 13:54:48
 407 (et pas de bonne raisons, car ipython est plus interactive que python) 27/08/2012 13:55:02
 408 pour obtenir les noms :
 409 dir(l) 27/08/2012 13:55:15
 410 dir = directory des noms... 27/08/2012 13:55:23
 411 pour obtenir l'aide sur un objet ou sa méthode ou attribut) : 27/08/2012 13:55:38
 412 help(l.append) 27/08/2012 13:55:42
 413 dernier truc 27/08/2012 13:55:54
 414 si vous tapez juste le NOM de la méthode... 27/08/2012 13:56:07
 415 sans l'exécuter 27/08/2012 13:56:14
 416 vous obtenez (ex): 27/08/2012 13:56:24
 417 
 418 In [26]: l.remove
 419 Out[26]: <built-in method remove of list object at 0x967030c>
 420 27/08/2012 13:56:34
 421 l'interpréteur vous dit "remove est une méthode built-in de l'objet list... (et emplacement mémoire) 27/08/2012 13:57:07
 422 pas intéressant 27/08/2012 13:57:10
 423 pour exécuter la méthode 27/08/2012 13:57:16
 424 faut mettre les parentheses 27/08/2012 13:57:23
 425 l.remove() 27/08/2012 13:57:26
 426 
 427 In [27]: l.remove()
 428 ---------------------------------------------------------------------------
 429 TypeError Traceback (most recent call last)
 430 
 431 /net/nfs-authnss.b.ca.auf/home/davin.baragiotta/<ipython console> in <module>()
 432 
 433 TypeError: remove() takes exactly one argument (0 given)
 434 27/08/2012 13:57:36
 435 27/08/2012 13:57:39
 436 ça, c'est une erreur... 27/08/2012 13:57:45
 437 je vous laisse lire... c'est plutôt explicite 27/08/2012 13:57:56
 438 ça se lit comme suit 27/08/2012 13:58:37
 439 on a une erreur de Type 27/08/2012 13:58:48
 440 claudine.mosozi a rejoint le salon 13:59        
 441 
 442 davin.baragiotta 27/08/2012 13:59:19
 443 la méthode remove() s'attend à avoir un seul argument (un paramètre si on veut) et on lui a rien donné
 444 en gros... remove veut absolument la chose à enlever en paramètre sinon il retourne une erreur 27/08/2012 13:59:40
 445 l.remove(1) 27/08/2012 13:59:46
 446 
 447 In [28]: l.remove(1)
 448 
 449 In [29]: l
 450 Out[29]: [3]
 451 27/08/2012 13:59:59
 452 c'est bien d'expérimenter dans l,interpréteur... on veut pas d'erreur dans notre script 27/08/2012 14:00:19
 453 ok, il nous reste une heure.... je vais accéléré un peu si il n'y a pas de questions 27/08/2012 14:00:39
 454 questions? 27/08/2012 14:00:41
 455 photo-valentin.kouadio@auf.org a quitté la salle 14:01  
 456 photo-valentin.kouadio a rejoint le salon 14:01 
 457 
 458 davin.baragiotta 27/08/2012 14:01:32
 459 bon...
 460 alors je continue 27/08/2012 14:01:36
 461  
 462 arnaud.amelina@auf.org 27/08/2012 14:01:40
 463 balla.fall 27/08/2012 13:50:41
 464 QUESTION : signification de ....:
 465 QUESTION : signification de ....: PASS 27/08/2012 13:51:23
 466 QUESTION : signification de ....: except        
 467 
 468 davin.baragiotta 27/08/2012 14:01:45
 469 ah
 470 PASS? 27/08/2012 14:01:56
 471 thierry.tsitoara a rejoint le salon 14:02       
 472 
 473 davin.baragiotta 27/08/2012 14:02:13
 474 except fait partie des structures de gestion des erreurs... on ne l'utilise pas seul
 475 ex.: 27/08/2012 14:02:18
 476 try:
 477 l.remove()
 478 except TypeError:
 479 pass 27/08/2012 14:02:34
 480 (try en première ligne, désolé) 27/08/2012 14:02:47
 481 ça se lit... essaie d'enlever un élément de ma liste même si je ne te passe pas d'argument... 27/08/2012 14:03:06
 482 si y'a une erreur TypeError... on la capte et on fait le traitement suivant : 27/08/2012 14:03:25
 483 pass 27/08/2012 14:03:26
 484 pass = mot clé... pour dire on fait rien 27/08/2012 14:03:34
 485 utiliser pass le moins possible 27/08/2012 14:04:01
 486 on l'utilise pour commencer un truc et y revenir plus tard 27/08/2012 14:04:11
 487 ex.: 27/08/2012 14:04:12
 488 je définis une fonction que je ne termine pas : 27/08/2012 14:04:25
 489 
 490 def suppression_indesirables():
 491 pass 27/08/2012 14:04:44
 492  
 493 arnaud.amelina@auf.org 27/08/2012 14:05:05
 494 n/a     
 495 
 496 davin.baragiotta 27/08/2012 14:05:17
 497 dans mon code, on voit bien que je veux créer une fonction qui supprime les indésirables... mais je ne sais pas quoi coder, donc je mets
 498 pass 27/08/2012 14:05:18
 499 voilà 27/08/2012 14:05:20
 500 je continue 27/08/2012 14:05:24
 501 on est rendu à "introspection" 27/08/2012 14:05:32
 502 je vous invite à coder un peu de données 27/08/2012 14:05:47
 503 pour le plaisir de sentir du python dans les doigts 27/08/2012 14:05:57
 504 nom = "Davin Baragiotta" 27/08/2012 14:06:16
 505 prenom, nom = nom.split() 27/08/2012 14:06:27
 506 nom.split? 27/08/2012 14:06:48
 507 testez le résultat : 27/08/2012 14:06:58
 508 prenom 27/08/2012 14:07:00
 509 nom 27/08/2012 14:07:01
 510 aaaaah... votre administration veut que tous les noms de familles soient majusucules 27/08/2012 14:07:20
 511 car ils savent pas discerner le prénom du nom? 27/08/2012 14:07:31
 512 (c'est du vécu, je le jure) 27/08/2012 14:07:38
 513 nom.upper() 27/08/2012 14:07:43
 514 vous pouvez vérifier si la valeur est altérée ou pas 27/08/2012 14:08:01
 515 
 516 In [30]: nom = 'Baragiotta'
 517 
 518 In [31]: nom.upper()
 519 Out[31]: 'BARAGIOTTA'
 520 
 521 In [32]: nom
 522 Out[32]: 'Baragiotta'
 523 27/08/2012 14:08:23
 524 ah tiens... non 27/08/2012 14:08:27
 525 c'est un service à la volée que de le mettre en majuscule... mais le nom original reste 27/08/2012 14:08:43
 526 un truc pas mal à savoir c'est le .join() 27/08/2012 14:09:07
 527 sur un string 27/08/2012 14:09:12
 528 on peut utiliser join 27/08/2012 14:09:17
 529 pour que ce string serve de jointure à des éléments d'une collection (une liste disons) 27/08/2012 14:09:38
 530 exemple : 27/08/2012 14:09:43
 531 '.'.join([1,2,3]) 27/08/2012 14:09:53
 532 la liste d'entiers 1, 2, 3 devrait être réunies par des points 27/08/2012 14:10:10
 533 mais 27/08/2012 14:10:13
 534 
 535 In [33]: '.'.join([1,2,3])
 536 ---------------------------------------------------------------------------
 537 TypeError Traceback (most recent call last)
 538 
 539 /net/nfs-authnss.b.ca.auf/home/davin.baragiotta/<ipython console> in <module>()
 540 
 541 TypeError: sequence item 0: expected string, int found
 542 27/08/2012 14:10:29
 543 python est fortement typé 27/08/2012 14:10:34
 544 on relie pas des entiers avec des strings 27/08/2012 14:10:44
 545 '.'.join(['davin','moussa','eric']) 27/08/2012 14:11:08
 546 
 547 In [34]: '.'.join(['davin','moussa','eric'])
 548 Out[34]: 'davin.moussa.eric'
 549 27/08/2012 14:11:24
 550 donne effectivement une chaine 27/08/2012 14:11:31
 551 c'est peut-être pas intuitif... le .join()... mais c,est bon à savoir 27/08/2012 14:11:49
 552 Conteneurs 27/08/2012 14:12:09
 553 il faut savoir que les conteneurs (liste, tuple, dictionnaires...) 27/08/2012 14:12:21
 554 ... peuvent contenir des trucs hétérogènes 27/08/2012 14:12:34
 555 l = ['davin', 1, False] 27/08/2012 14:12:43
 556 c'est légal 27/08/2012 14:12:47
 557 liste de string, entier et booléen 27/08/2012 14:13:04
 558 aussi, pour accéder à un item d'un conteneur 27/08/2012 14:13:22
 559 on peut utiliser son index numérique 27/08/2012 14:13:30
 560 0 = premier item 27/08/2012 14:13:34
 561 l[0] 27/08/2012 14:13:38
 562 
 563 In [35]: l = ['davin', 1, False]
 564 
 565 In [36]: l[0]
 566 Out[36]: 'davin'
 567 
 568 In [37]: l[1]
 569 Out[37]: 1
 570 
 571 In [38]: l[2]
 572 Out[38]: False
 573 27/08/2012 14:14:02
 574 il existe aussi le slicing... 27/08/2012 14:14:15
 575 c'est une notion pour retourne une "tranche" de valeurs... 27/08/2012 14:14:27
 576 je vous laisse explorer seul, plus tard 27/08/2012 14:14:37
 577 l[0:1] 27/08/2012 14:14:41
 578 
 579 In [42]: l[0:2]
 580 Out[42]: ['davin', 1]
 581 27/08/2012 14:15:13
 582 Itérations 27/08/2012 14:15:21
 583 pour itérer, while existe 27/08/2012 14:15:32
 584 mais c'est pas top 27/08/2012 14:15:38
 585 exemple : 27/08/2012 14:15:42
 586 
 587 In [43]: annee = 2012
 588 
 589 In [44]: while annee <= 2015:
 590 ....: print annee
 591 ....: annee = annee + 1
 592 ....: 
 593 ....: 
 594 2012
 595 2013
 596 2014
 597 2015
 598 27/08/2012 14:16:17
 599 rappel : pas d'accolade {} pour le bloc... indenter 27/08/2012 14:16:41
 600 le top = for 27/08/2012 14:16:58
 601 pour itérer 27/08/2012 14:17:01
 602 
 603 In [47]: for i in range(2012, 2016):
 604 ....: print i
 605 ....: 
 606 ....: 
 607 2012
 608 2013
 609 2014
 610 2015
 611 27/08/2012 14:17:49
 612 remarquez la beauté du in 27/08/2012 14:18:02
 613 "in" 27/08/2012 14:18:06
 614 ça se lit : pour chaque élément dans le conteneur itérable... fait ceci (ici = print) 27/08/2012 14:18:29
 615 le "in" existe aussi dans un autre contexte 27/08/2012 14:18:46
 616 pour tester l'appartenance à un ensemble 27/08/2012 14:18:57
 617 je veux dire... une collection (pas nécessaire un set() ) 27/08/2012 14:19:15
 618 
 619 In [48]: l = [1,2,3]
 620 
 621 In [49]: 2 in l
 622 Out[49]: True
 623 
 624 In [50]: 5 in l
 625 Out[50]: False
 626 27/08/2012 14:19:37
 627 ahaha! 27/08/2012 14:19:39
 628 ça commence à être génial comme syntaxe! 27/08/2012 14:19:48
 629 ce qui nous amène au conditionnel pour tester ça 27/08/2012 14:20:05
 630 les conditionnel... pas grand chose à dire : 27/08/2012 14:20:12
 631 if, elif et else 27/08/2012 14:20:19
 632 encore une fois, pas de {} 27/08/2012 14:20:25
 633 et pas de endif non plus 27/08/2012 14:20:32
 634 
 635 In [51]: liste = range(6)
 636 
 637 In [52]: if 5 in liste:
 638 ....: print 'hourra 5'
 639 ....: elif 4 in liste:
 640 ....: print 'hourra 4'
 641 ....: else:
 642 ....: print 'pas hourra'
 643 ....: 
 644 hourra 5
 645 27/08/2012 14:20:57
 646 on peut tester la valeur de range(6) tout seul... dans interpréteur : 27/08/2012 14:21:19
 647 
 648 In [53]: range(6)
 649 Out[53]: [0, 1, 2, 3, 4, 5]
 650 27/08/2012 14:21:32
 651 range est utilisé notamment pour contrôler nombre itération dans des for... 27/08/2012 14:21:58
 652 ... mais ici je l'utilise juste pour me faire une liste rapido 27/08/2012 14:22:09
 653 on voit que 5 est dans la liste créée par range(6) 27/08/2012 14:22:25
 654 donc le test "5 in liste" retourne vrai 27/08/2012 14:22:40
 655 Fichiers 27/08/2012 14:23:00
 656 c'est très facile d'ouvrir un fichier et parser son contenu en python 27/08/2012 14:23:17
 657 créer un fichier dans le répertoire où vous avez lancé votre terminal 27/08/2012 14:23:34
 658 (dans votre home, par exemple) 27/08/2012 14:23:44
 659 un fichier texte qu'on va appeller 'texte.txt' 27/08/2012 14:23:57
 660 entre des lignes de texte... 27/08/2012 14:24:04
 661 moi j'ai ça : texte.txt
 662 J'aime Python
 663 et la communauté tech
 664 de l'AUF.
 665 27/08/2012 14:24:44
 666 pour parser les lignes de ce fichier : 27/08/2012 14:24:59
 667 
 668 In [56]: for line in f.readlines():
 669 print line,
 670 f.close()
 671 ....: 
 672 ....: 
 673 J'aime Python
 674 et la communauté tech
 675 de l'AUF.
 676 
 677 
 678 27/08/2012 14:25:45
 679 on voit que chacune des lignes a été imprimée... 27/08/2012 14:26:04
 680 hey... vous comprenez la puissance du truc? 27/08/2012 14:26:14
 681 si vous avez des données .csv, à tout hasard... 27/08/2012 14:26:26
 682 et que vous faites une split sur a ligne et unpackez dans les variables 27/08/2012 14:26:48
 683 on essaie? 27/08/2012 14:26:58
 684 go... 27/08/2012 14:27:06
 685 contenu de texte.txt :
 686 'Davin', 'Baragiotta'
 687 'Victor', 'Bruneau'
 688 'Franck', 'Kouyami' 27/08/2012 14:27:45
 689 pensez et explorez commencer spliter sur la virgule... et stocker le prenom et le nom dans 2 variables séparées... 27/08/2012 14:28:20
 690 des questions? 27/08/2012 14:29:08
 691 (pendant qu'on cherche solutionnaire  ) 27/08/2012 14:29:20
 692 ok... pas de question 27/08/2012 14:30:56
 693 solution :
 694 In [60]: f = open('texte.txt')
 695 
 696 In [61]: for line in f.readlines():
 697 ....: prenom, nom = line.split()
 698 ....: 
 699 ....: print prenom
 700 ....: print nom
 701 ....: 
 702 ....: 
 703 'Davin',
 704 'Baragiotta'
 705 'Victor',
 706 'Bruneau'
 707 'Franck',
 708 'Kouyami'
 709 27/08/2012 14:31:00
 710 au lieu de printer la ligne comme on faisait, on la split 27/08/2012 14:31:15
 711 lisez la doc de split... mais ça fait le boulot qu'on veut (sépare sur virgule ou espace) 27/08/2012 14:31:36
 712 ensuite j'imprime les variables 27/08/2012 14:31:50
 713 Formattage de chaine 27/08/2012 14:31:55
 714 on pourrait faire un truc plus joli avec les chaines 27/08/2012 14:32:06
 715 lui dire bonjour 27/08/2012 14:32:17
 716 voici la syntaxe : 27/08/2012 14:32:21
 717 "Bonjour %s %s" % (prenom, nom.upper()) 27/08/2012 14:32:50
 718 %s = un placeholder... disons une variable pour la string... "s" veut dire qu'on s'attend à ce que la valeur à insérer soit elle même une string... 27/08/2012 14:33:25
 719 %d = entier 27/08/2012 14:33:32
 720 on voit qu'on a 2 %s dans "Bonjour %s %s" 27/08/2012 14:33:49
 721 ensuite on a un % seul 27/08/2012 14:33:54
 722 ça se lit ainsi : 27/08/2012 14:34:01
 723 prend les valeurs à droite de % 27/08/2012 14:34:10
 724 pour les mettre dans le string de gauche 27/08/2012 14:34:16
 725 chaque variable, dans l'ordre, va remplacer la frime dans le placeholder 27/08/2012 14:34:39
 726 en fait, je m'attends à avoir : 27/08/2012 14:34:49
 727 "Bonjour Davin BARAGIOTTA" 27/08/2012 14:34:56
 728 preuve : 27/08/2012 14:34:58
 729 
 730 In [65]: f = open('texte.txt')
 731 
 732 In [66]: for line in f.readlines():
 733 prenom, nom = line.split()
 734 print "Bonjour %s %s" % (prenom, nom.upper())
 735 ....: 
 736 ....: 
 737 Bonjour 'Davin', 'BARAGIOTTA'
 738 Bonjour 'Victor', 'BRUNEAU'
 739 Bonjour 'Franck', 'KOUYAMI' 27/08/2012 14:35:53
 740 bon seul truc laid dont je viens de m'apercevoir c'est qu'on garde les quote ' venant du fichier... 27/08/2012 14:36:26
 741 on pourrait utiliser .trim() 27/08/2012 14:36:34
 742 des questions avant d'aller plus loin? 27/08/2012 14:36:39
 743 eddy.andriamanantena a quitté la salle 14:36    
 744 eddy.andriamanantena a rejoint le salon 14:37   
 745 moussa.nombre a rejoint le salon 14:37  
 746 
 747 arnaud.amelina@auf.org 27/08/2012 14:38:00
 748 Oui     
 749 
 750 davin.baragiotta 27/08/2012 14:38:03
 751 ok, on termine aevc l'écriture de script
 752 ah? 27/08/2012 14:38:04
 753 j'écoute 27/08/2012 14:38:06
 754  
 755 arnaud.amelina@auf.org 27/08/2012 14:38:33
 756 C'est bon tu as répondu dans l'autre espace     
 757 
 758 davin.baragiotta 27/08/2012 14:38:37
 759 ok      
 760 
 761 arnaud.amelina@auf.org 27/08/2012 14:38:37
 762 Continue donc   
 763 
 764 davin.baragiotta 27/08/2012 14:38:44
 765 un script
 766 ce n'est absolument rien d'autre que du code python dans un fichier... fichier qu'on va exécuter 27/08/2012 14:39:02
 767 on vient de faire du code python... mais dans l'interpréteur 27/08/2012 14:39:13
 768 s'agit de retranscrire le code intéressant qu'on vient de découvrir interactivement grace à introspection 27/08/2012 14:39:45
 769 dans le support à l'atelier, je donne un exemple de script plus complet 27/08/2012 14:40:01
 770 mais codons simplement ce qu'on vient de faire 27/08/2012 14:40:11
 771 créons un fichier : script.py 27/08/2012 14:40:22
 772 à côté de texte.txt (sur votre home, en principe) 27/08/2012 14:40:36
 773 voici mon code : 27/08/2012 14:41:16
 774 script.py :
 775 f = open('texte.txt')
 776 
 777 for line in f.readlines():
 778 prenom, nom = line.split()
 779 print "Bonjour %s %s" % (prenom, nom.upper()) 27/08/2012 14:41:23
 780 ce script ouvre le fichier texte.txt et parse chacune de ses lignes, splite son contenu et imprime le prenom et nom dans une chaine formattée... 27/08/2012 14:41:58
 781 ce script aurait pu faire plein de truc : stocker les noms dans une DB, par exemple 27/08/2012 14:42:14
 782 mais essayons maintenant d'exécuter ce script 27/08/2012 14:42:25
 783 ipython :
 784 run script 27/08/2012 14:42:34
 785 ou 27/08/2012 14:42:36
 786 
 787 run script.py 27/08/2012 14:42:40
 788 python :
 789 $ python script.py 27/08/2012 14:42:53
 790 (dépendamment de votre interpréteur) 27/08/2012 14:43:03
 791 on y va 27/08/2012 14:43:27
 792 voici : 27/08/2012 14:43:28
 793 
 794 In [69]: run script
 795 Bonjour 'Davin', 'BARAGIOTTA'
 796 Bonjour 'Victor', 'BRUNEAU'
 797 Bonjour 'Franck', 'KOUYAMI'
 798 27/08/2012 14:43:39
 799 tadaaaaaaaaaaaaaaaam! 27/08/2012 14:43:43
 800 voici votre premier script python 27/08/2012 14:43:50
 801 (ou peut-être pas  ) 27/08/2012 14:43:53
 802 questions? 27/08/2012 14:44:13
 803  
 804 doan.manh.ha 27/08/2012 14:44:17
 805 ah oui
 806 ça marche 27/08/2012 14:44:28
 807  
 808 davin.baragiotta 27/08/2012 14:44:34
 809 génial!
 810 sérieusement... vous êtes maintenant très puissant 27/08/2012 14:44:44
 811 pourquoi? 27/08/2012 14:44:47
 812 car vous avez un langage de "haut niveau" 27/08/2012 14:45:01
 813 qui peut donc faire des traitements plus complexes que bash mais de manière plus lisible 27/08/2012 14:45:23
 814 attention : 27/08/2012 14:45:29
 815 continuez d'utiliser bash partout où il fait bien le boulot 27/08/2012 14:45:41
 816 mais pour des trucs de plus haut niveau, vous avez Python 27/08/2012 14:46:04
 817 ce qui nous reste à voir 27/08/2012 14:46:10
 818 en 10 minutes max : 27/08/2012 14:46:16
 819 fonctions et import 27/08/2012 14:46:27
 820 fonctions : je vous laisse voir à partir de la doc de l,atelier et doc officielle 27/08/2012 14:46:47
 821 en fait, fait juste savoir c'est quoi une fonction en informatique 27/08/2012 14:46:59
 822 ce qui est particulier, et cool en Python 27/08/2012 14:47:07
 823 c'est les *args et **kwargs : 27/08/2012 14:47:16
 824 des varaibles spéciales dans la déclaration de la fonction 27/08/2012 14:47:28
 825 pour "ramasser" tous les paramètres qu'on pourrait lui passer 27/08/2012 14:47:41
 826 ce qui donner des trucs comme : 27/08/2012 14:47:55
 827 coucou('Paul') 27/08/2012 14:48:08
 828 coucou('Paul', 'Lemay') 27/08/2012 14:48:16
 829 et c'est légal... 27/08/2012 14:48:21
 830 du polymorphisme de fonction, en quelque sorte 27/08/2012 14:48:30
 831 import 27/08/2012 14:48:34
 832 c'est là que ça se joue 27/08/2012 14:48:39
 833 vous en voulez pas réinventer la roue 27/08/2012 14:48:49
 834 vous voulez.... importer le code des autres 27/08/2012 14:48:57
 835 voire le vôtre 27/08/2012 14:49:00
 836 allez voir la doc de la librairie standar, pour le plaisir 27/08/2012 14:49:16
 837 pour voir tous les modules qui s'offre à vous (sans rien à avoir à installer... ça vient avec Python) 27/08/2012 14:49:35
 838 ça ferait l,objet d'une atelier plus avancé : 27/08/2012 14:49:51
 839 http://wiki.auf.org/wikiteki/Ateliers/ 27/08/2012 14:50:04
 840 http://wiki.auf.org/wikiteki/Ateliers/2012-02-24/Python 27/08/2012 14:50:10
 841 vous y verrez des exemples (venant de JC) pour l'admin système 27/08/2012 14:50:26
 842 mais pour de plus amples discussions : Python vs Bash... rendez-vous sur liste tech avec JC 27/08/2012 14:50:43
 843 (moi je ne suis pas admin syst) 27/08/2012 14:50:48
 844 27/08/2012 14:50:49
 845 conclusion : 27/08/2012 14:50:56
 846 avec les import... vous êtes royal 27/08/2012 14:51:08
 847 import urlllib 27/08/2012 14:51:12
 848 vous accédez au web 27/08/2012 14:51:18
 849 pour importer vos propres trucs 27/08/2012 14:51:36
 850 shafeek.sumser a quitté la salle 14:51  
 851 
 852 davin.baragiotta 27/08/2012 14:51:50
 853 lisez la section "modules" de l,atelier et expériementer dans l'interpréteur    
 854 tran.xuan.huy a quitté la salle 14:51   
 855 
 856 davin.baragiotta 27/08/2012 14:51:57
 857 vous importez vos fonctions
 858 vous codez une fois... et utilisez N fois 27/08/2012 14:52:06
 859 finalement... vous voudriez utiliser des modules qui ne viennent pas avec le langage et que vous N,avez pas coder? 27/08/2012 14:52:35
 860 vous avez un exemple à la fin de cet atelier 27/08/2012 14:52:45
 861 on vous demander de parser un flux RSS 27/08/2012 14:52:52
 862 essayez-le 27/08/2012 14:53:00
 863 un petit tour sur le web et on trouve feedparser 27/08/2012 14:53:09
 864 on lit sa doc 27/08/2012 14:53:14
 865 on expérimente dans interpréteur 27/08/2012 14:53:20
 866 on trouve notre solution 27/08/2012 14:53:24
 867 ... 27/08/2012 14:53:25
 868 on la code dans un script et le tour est joué 27/08/2012 14:53:32
 869 tran.xuan.huy a rejoint le salon 14:53  
 870 
 871 davin.baragiotta 27/08/2012 14:53:41
 872 c'est comme ça qu'on travaille avec Python
 873 fin de la fin... pour stocker dans une DB comme un pro 27/08/2012 14:53:58
 874 regardez : 27/08/2012 14:54:03
 875 import sqlite3 27/08/2012 14:54:08
 876 ça vient avec python 27/08/2012 14:54:13
 877 http://docs.python.org/library/ 27/08/2012 14:54:32
 878 vous trouverez donc dans library 27/08/2012 14:54:37
 879 http://docs.python.org/library/sqlite3.html 27/08/2012 14:54:49
 880 tadam... 27/08/2012 14:54:52
 881 27/08/2012 14:54:55
 882 mais vite, vous voudrez faire plus... 27/08/2012 14:55:04
 883 et Django est là pour vous 27/08/2012 14:55:10
 884 l'équipe SI aussi d,ailleurs 27/08/2012 14:55:20
 885 je vous laisse regarder l'horaire pour les ateliers Django 27/08/2012 14:55:30
 886  
 887 arnaud.amelina@auf.org 27/08/2012 14:55:33
 888 Il reste 5 mn   
 889 
 890 davin.baragiotta 27/08/2012 14:55:37
 891 et je suis là opur vos questions
 892 ----------- FIN ATELIER : QUESTIONS ------------ 27/08/2012 14:55:55
 893  
 894 arnaud.amelina@auf.org 27/08/2012 14:56:10
 895 Formidable
 896 Darvin Legrand 27/08/2012 14:56:20
 897 Merci torrent applaudissement !!! 27/08/2012 14:56:45
 898  
 899 davin.baragiotta 27/08/2012 14:56:53
 900 ahaha   
 901 
 902 arnaud.amelina@auf.org 27/08/2012 14:57:44
 903 On a eu 28 Participants 29 y compris Formateur  
 904 
 905 davin.baragiotta 27/08/2012 14:57:56
 906 génial  
 907 
 908 tran.xuan.huy 27/08/2012 14:58:11
 909 je me demande si python est utile pour les techniciens de l'auf?        
 910 
 911 davin.baragiotta 27/08/2012 14:58:12
 912 j'en profite (avant d'aller au petit coin) pour faire la pub du prochain atelier :
 913 Git : versionner votre code source... donc vos scripts python 27/08/2012 14:58:25
 914  
 915 arnaud.amelina@auf.org 27/08/2012 14:58:26
 916 C'est un Franc succès là  je suis sûr que tout le monde est content ceux qui ne le sont pas n'aont qu'à le manifester de suite  
 917 
 918 davin.baragiotta 27/08/2012 14:58:34
 919 ahaha
 920 -------------- FIN ATELIER Python ------------------- 27/08/2012 14:58:46
 921 

arnaud.amelina@auf.org 27/08/2012 14:58:59 Ouep Donc FIN ATELIER PYTHON !!!

david.violette 27/08/2012 14:59:07 Merci davin

davin.baragiotta 27/08/2012 14:59:19 plaisir campione

arnaud.amelina@auf.org 27/08/2012 15:00:15 Grand Merci Davin !!! Toute l'équipe d'organisation te félicite

Ateliers/Python/Base/2012-08-27 (dernière édition le 2012-08-29 19:19:46 par DavinBaragiotta)