From 0262e7670d638e98db2e0aee34592612522da980 Mon Sep 17 00:00:00 2001 From: Sinma Date: Sat, 6 Jul 2013 22:37:39 +0200 Subject: [PATCH 01/25] =?UTF-8?q?R=C3=A9organisation=20de=20=C2=ABPrincipe?= =?UTF-8?q?s=20de=20fonctionnement=C2=BB=20et=20simplification=20de=20la?= =?UTF-8?q?=20pr=C3=A9sentation=20des=20commandes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dans la partie «Principes de fonctionnement», j’ai placé le texte explicatif avant la description pour les deux derniers points de la liste. J’ai aussi supprimé ce qu’il y avait avant le $ pour les lignes de commandes, ça risque moins de provoquer la confusion (moi-même je n’ai pas compris tout de suite) --- README.md | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 3c0992a3..1a22440f 100644 --- a/README.md +++ b/README.md @@ -33,13 +33,14 @@ Les principes sont assez simples : Dans les deux cas, cela revient au même : vous disposez localement d'un dépôt sur lequel vous allez pouvoir travailler. * Travailler sur votre dépôt. - * Versionner vos modifications -> Créer un commit. Une fois satisfait de votre modification ou de votre ajout, vous pouvez versionner vos modifications. En langage Git, on parle de commit. Ce commit crée une nouvelle version du fichier. S'il s'agit d'un nouveau fichier, ce sera la première version. - * Publier vos modifications. - + * Versionner vos modifications → Créer un commit. + Vos commits sont dans votre dépôt local. Vous avez alors la possibilité de les publier vers le dépôt initial ou même vers un autre dépôt. En langage Git, on parle de push. Si vous ne disposez pas des droit de publication sur dépôt distant, vous pouvez aussi proposer vos modifications au responsable du dépôt. En langage Git on parle de pull request. + + * Publier vos modifications. En résumé, vous créez un dépôt local, vous travaillez, vous committez et vous publiez. Facile, non ? @@ -48,7 +49,7 @@ En résumé, vous créez un dépôt local, vous travaillez, vous committez et vo Concrètement, voici ce que ça donne pour ce projet. Commençons pas cloner joyeusement le projet. Dans votre dossier personnel, placez vous à l'endroit où vous souhaitez créer votre dépôt local puis exécutez la commande de clonage ```bash -git clone https://github.com/framasoft/plongez-dans-python3.git +$git clone https://github.com/framasoft/plongez-dans-python3.git ``` Vous devriez obtenir le résultat suivant. Vous remarquerez que cette opération crée automatiquement un dossier dans lequel figurera votre dépôt : @@ -65,7 +66,7 @@ Resolving deltas: 100% (1587/1587), done. Faites une modification. Vous pouvez obtenir à tout moment le statut de votre dépôt : ```bash -Blake:plongez-dans-python3 gcoulais$ git status +$ git status # On branch master # Untracked files: # (use "git add ..." to include in what will be committed) @@ -89,8 +90,8 @@ Ici un fichier README.md a été ajouté mais n'a pas encore été committé. Gi Ajoutons maintenant le fichier au suivi de version et committons. L'opération se déroule donc en deux fois : add puis commit. Un commit est toujours accompagné d'un message expliquant ce que vous avez fait. ```bash -Blake:plongez-dans-python3 gcoulais$ git add README.md -Blake:plongez-dans-python3 gcoulais$ git commit -m "Ajout du README.md" +$ git add README.md +$ git commit -m "Ajout du README.md" [master 2c53431] Ajout du README.md 1 file changed, 80 insertions(+) create mode 100644 README.md @@ -99,7 +100,7 @@ Blake:plongez-dans-python3 gcoulais$ git commit -m "Ajout du README.md" Il ne reste plus qu'à publier la modification sur le dépôt distant : ```bash -Blake:plongez-dans-python3 gcoulais$ git push origin master +$ git push origin master Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. @@ -114,7 +115,7 @@ To https://github.com/framasoft/plongez-dans-python3.git Effectivement, d'autres que vous travaillent sur cette traduction. Il faut donc que vous puissiez récupérer leurs modifications. Encore une fois, c'est un jeu d'enfant. Placez vous simplement dans votre dépôt et magie : ```bash -Blake:plongez-dans-python3 gcoulais$ git pull origin master +$ git pull origin master From https://github.com/framasoft/plongez-dans-python3 * branch master -> FETCH_HEAD Already up-to-date. @@ -123,7 +124,7 @@ Already up-to-date. Ici ce n'est pas très parlant : le dépôt local était déjà à jour. Mais c'est bien là que vous verrez apparaître toutes les modifications de vos petits camarades. Attention, si vous avez des modifications en cours, Git refusera de faire l'opération de pull. Il suffit de mettre de côté vos modifications, de récupérer la dernière version du dépôt distant puis d'y appliquer vos modifications en cours. En langage git, ça donne ça : ```bash -Blake:plongez-dans-python3 gcoulais$ git stash +$ git stash Saved working directory and index state WIP on master: 7583460 README : coloration syntaxique pour les blocs de code HEAD is now at 7583460 README : coloration syntaxique pour les blocs de code ``` @@ -131,13 +132,13 @@ HEAD is now at 7583460 README : coloration syntaxique pour les blocs de code puis ```bash -Blake:plongez-dans-python3 gcoulais$ git pull origin master +$ git pull origin master ``` et enfin ```bash -Blake:plongez-dans-python3 gcoulais$ git stash apply +$ git stash apply # On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) @@ -154,5 +155,3 @@ no changes added to commit (use "git add" and/or "git commit -a") TODO: expliquer brièvement les branches. TODO: expliquer brièvement les remote. Pourquoi origin master - - From 35c2a4c061a953e0ced1f69b0ecaabc1dbb224cd Mon Sep 17 00:00:00 2001 From: Sinma Date: Sat, 6 Jul 2013 23:08:02 +0200 Subject: [PATCH 02/25] =?UTF-8?q?Correction=20d=E2=80=99espace=20ins=C3=A9?= =?UTF-8?q?cable=20(mode=20typo=20nazi)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 00-index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/00-index.html b/00-index.html index e7bf7b40..96c183ae 100644 --- a/00-index.html +++ b/00-index.html @@ -21,7 +21,7 @@
 
-

Vous êtes ici :   +

Vous êtes ici : 

Plongez dans Python 3

From dd60bc9fc192fbdc31cc99ca5cba95c2a9d49d94 Mon Sep 17 00:00:00 2001 From: Gilles Coulais Date: Sun, 7 Jul 2013 12:01:15 +0200 Subject: [PATCH 03/25] Ajouts : branches, remotes --- README.md | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1a22440f..56f72435 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ TODO: expliquer le projet, comment participer, qui contacter, à quelle on mange GIT : petit guide à l'usage du débutant --------------------------------------- -Git est un système de gestion de versions décentralisé [DVCS](https://en.wikipedia.org/wiki/Distributed_revision_control). Voilà pour les gros mots. Passons maintenant à quelque chose de compréhensible pour l'humain courant. +Git est un système de gestion de versions décentralisé [DVCS](https://en.wikipedia.org/wiki/Distributed_revision_control). Voilà pour les gros mots. + +Passons maintenant à quelque chose de compréhensible pour l'humain courant. Ce guide doit vous mettre le pied à l'étrier du projet de traduction de Dive Into Python 3. ### Git : kesako ? @@ -17,7 +19,7 @@ Git permet de gérer des versions de fichiers. Grâce à Git, on sait qui a fait ### Je n'y connais rien. Que fais je ? -Eh bien vous apprenez. Pas de panique : inutile d'avoir fait Polytechnique. La courbe d'apprentissage des commandes de base est très rapide. +Eh bien vous apprenez. Pas de panique : inutile d'avoir fait Polytechnique. La courbe d'apprentissage des commandes de base est très rapide. Vous allez apprendre comment fonctionne Git avec des explications pour être humain et comment utiliser les commandes de base de Git : clone, pull, push, log, commit, branch, status... #### Installation @@ -129,13 +131,13 @@ Saved working directory and index state WIP on master: 7583460 README : colorati HEAD is now at 7583460 README : coloration syntaxique pour les blocs de code ``` -puis +puis : ```bash $ git pull origin master ``` -et enfin +et enfin : ```bash $ git stash apply @@ -151,7 +153,85 @@ no changes added to commit (use "git add" and/or "git commit -a") #### Origin master : c'est quoi cette bouteille de lait ? -#### À propos des branches +Lors des opérations de récupératio (pull) et publication (push), vous avez utilisé des choses inconnues : origin master. Tout d'abord, c'est dangereux d'exécuter une commande sans savoir ce qu'elle fait :) . Bon, ici aucun chaton n'a été tué, l'honneur est sauf. Mais alors qu'est ce que c'est que ce 'origin master' ? + +Votre dépôt local est autonome. Vous pouvez n'utiliser que lui et ne jamais rien publier. Mais si vous souhaitez contribuer à un autre dépôt, il y a un moment où votre votre dépôt local doit connaitre un plusieurs dépôts externes vers lesquels il pourra publier ou desquels il pourra récupérer des mise à jour. En langage Git, cela s'appelle un remote. Un remote est un dépôt distant qui est associé au votre. + +Par ailleurs, votre dépôt local peut être associé à plusieurs remotes. Il faut donc un moyen de différencier ces remotes. Ils sont donc nommés. + +Enfin, un remote contient au moins une branche, il faut donc pouvoir identifier la branche distante avec laquelle vous souhaitez communiquer. Comment ça vous ne savez pas ce qu'est une branche ? Un peu de patience, ça vient. + +Pour en revenir à ce qui nous intéresse, origin est donc un dépôt distant et master une branche dans ce dépôt. La magie, c'est que vous n'avez rien fait pour créer ou nommer ce remote. En fait, Git l'a fait tout seul comme un grand lorsque vous avez cloné le dépôt. Vous pouvez voir les dépôts auxquels vous être abonnés avec une simple commande : + +```bash +$ git remote -v +origin git@github.com:framasoft/plongez-dans-python3.git (fetch) +origin git@github.com:framasoft/plongez-dans-python3.git (push) +no changes added to commit (use "git add" and/or "git commit -a") +``` + +Il y a beaucoup de choses que l'on peut faire avec les remotes. Il y a cependant de grandes chances que cette simple commande vous soit suffisante dans le cadre de ce projet. + +#### Jardinons un peu : les branches + +Pour en terminer avec ce petit voyage au pays de Git, soyons un peu bucoliques. Lorsque vous créez ou clonez un dépôt, Git crée une branche par défaut appelée master. Une branche est une sorte de copie du dépôt (en fait Git ne copie pas vraiment les données, mais nous n'irons pas aussi loin). Vous pouvez alors travailler sur cette copie sans impacter les autres branches : toute ce qui est committé dans cette nouvelle branche n'apparaîtra pas dans les autres. Si au final vous êtes satisfaits de votre travail, il ne vous reste plus qu'à commiter vos modifications dans cette branche puis à les rapatrier dans la branche master. En langage Git, on parle de merge. Mais vous pouvez aussi ne pas être content de ce que vous avez fait et ne pas vouloir conserver ces modifications. Il suffit de les committer puis de supprimer la nouvelle branche. + +Pour connaitre la liste des branches de votre dépôt local : + +```bash +$ git branch +* master +``` + +Pour créer une nouvelle branche : + +```bash +$ git branch maNouvelleBranche +$ git branch + maNouvelleBranche +* master +``` + +L'astérisque vous indique le dépôt sur lequel vous travaillez. Changeons de branche pour travailler sur maNouvelleBranche : + +```bash +$ git checkout maNouvelleBranche +M README.md +Switched to branch 'maNouvelleBranche' +gilles@Arctica:~/Developpement/Python/DiveIntoPython3$ git branch +* maNouvelleBranche + master +``` + +L'astérisque vous montre que vous êtes désormais sur la branche maNouvelleBranche. + +#### Faites le petit chef : lister les commits + +Dans votre activité professionnelle, vous avez sûrement un (petit) chef qui vient vous voir 20 fois par jour en vous disant "Alors, t'en es où ?". Oui, c'est énervant. + +Mais Git est un gars calme et posé qui répondra toujours à vos sollicitations. Alors n'hésitez pas à faire le chef : + +```bash +$ git log +commit 35c2a4c061a953e0ced1f69b0ecaabc1dbb224cd +Author: Sinma +Date: Sat Jul 6 23:08:02 2013 +0200 + + Correction d’espace insécable (mode typo nazi) + +commit 0262e7670d638e98db2e0aee34592612522da980 +Author: Sinma +Date: Sat Jul 6 22:37:39 2013 +0200 + + Réorganisation de «Principes de fonctionnement» et simplification de la présentation des commandes + + Dans la partie «Principes de fonctionnement», j’ai placé le texte explicatif avant la description pour les deux derniers points de la liste. + + J’ai aussi supprimé ce qu’il y avait avant le $ pour les lignes de commandes, ça risque moins de provoquer la confusion (moi-même je n’ai pas comp + +commit f38a3530decc51c6ec72163f9595387409e506af +[...] +``` +Vous pouvez naviguer dans l'historique des commits avec les flèches haut et bas de votre clavier. Quittez avec q. -TODO: expliquer brièvement les branches. -TODO: expliquer brièvement les remote. Pourquoi origin master +Vous avez désormais les armes pour démarrer. Il y a énormément d'autres choses que vous pouvez faire avec Git mais ce n'est pas l'objet de ce tutoriel. Pour savoir comment faire telle ou telle chose, vous pouvez consulter le [Git Book](http://git-scm.com/book/fr/) ou solliciter la [liste de discussion](http://www.framalistes.org/sympa/info/plongez-dans-python-3). From 8310f17516b2e692bdee0773370190cee1b758f7 Mon Sep 17 00:00:00 2001 From: Sinma Date: Thu, 11 Jul 2013 15:31:39 +0200 Subject: [PATCH 04/25] =?UTF-8?q?Ajout=20d=E2=80=99une=20espace=20dans=20l?= =?UTF-8?q?e=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La correction la plus nulle du monde --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56f72435..d1da3ab7 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ En résumé, vous créez un dépôt local, vous travaillez, vous committez et vo Concrètement, voici ce que ça donne pour ce projet. Commençons pas cloner joyeusement le projet. Dans votre dossier personnel, placez vous à l'endroit où vous souhaitez créer votre dépôt local puis exécutez la commande de clonage ```bash -$git clone https://github.com/framasoft/plongez-dans-python3.git +$ git clone https://github.com/framasoft/plongez-dans-python3.git ``` Vous devriez obtenir le résultat suivant. Vous remarquerez que cette opération crée automatiquement un dossier dans lequel figurera votre dépôt : From 5a0e62d67152b3482a5defa6772b6774b3d2f2e6 Mon Sep 17 00:00:00 2001 From: audionuma Date: Sun, 14 Jul 2013 08:01:15 +0200 Subject: [PATCH 05/25] =?UTF-8?q?D=C3=A9but=20trad=20chapitre=20native=20d?= =?UTF-8?q?atatypes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 03-native-datatypes.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03-native-datatypes.html b/03-native-datatypes.html index 82421bfc..4f113584 100755 --- a/03-native-datatypes.html +++ b/03-native-datatypes.html @@ -1,6 +1,6 @@ --- title: Les types prédéfinis -status: Non traduit +status: En cours permalink: native-datatypes.html --- From c72a032cc624bc81e272a7134d735d263e5ab79d Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sun, 14 Jul 2013 11:56:08 +0200 Subject: [PATCH 06/25] Update 01-installing-python.html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Passage à en relecture --- 01-installing-python.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01-installing-python.html b/01-installing-python.html index 3c6134a4..e2e41fc2 100755 --- a/01-installing-python.html +++ b/01-installing-python.html @@ -1,6 +1,6 @@ --- title: Installer Python -status: Non traduit +status: Relecture permalink: installing-python.html --- From cf5ceecd2ee0cd4fc04fd4a3d66f72dafc13bf2a Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sun, 14 Jul 2013 12:13:40 +0200 Subject: [PATCH 07/25] Ajout du wokflow dans le README --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d1da3ab7..b5d6b71a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,25 @@ Dive Into Python 3 Projet de traduction fr ----------------------- -TODO: expliquer le projet, comment participer, qui contacter, à quelle on mange, pourquoi les escargots n'ont pas de dents... +TODO: expliquer le projet, à quelle heure on mange, pourquoi les escargots n'ont pas de dents… + +Comment participer ? +-------------------- + +Pour discuter, on a une mailing-list : plongez-dans-python-3@framalistes.org. Inscrivez-vous sur [http://www.framalistes.org/sympa/subscribe/plongez-dans-python-3](http://www.framalistes.org/sympa/subscribe/plongez-dans-python-3). + +Ensuite, il faut nous envoyer un petit mail sur cette liste en nous donnant votre pseudo github, qu'on vous ajoute au groupe qui a les droits sur ce dépôt, histoire de pouvoir bosser. + +La façon de travailler est assez simple, mais il est primordial de s'y tenir, sinon ça va être le gros bazar. +1. Passer le statut à "En cours" dans l'en-tête du fichier que vous allez traduire, dans la branche master. +2. Pousser cette modification (ou la refaire) dans la branche gh-pages. +3. Créer, à partir de la branche master, une nouvelle branche portant le nom du fichier à traduire. +4. Traduire. +5. Passer le statut du fichier à "Relecture" dans la branche du fichier, la branche master et la branche gh-pages +6. Faire une pull-request pour pousser la branche du fichier dans la branche master +7. Relecture par les autres membres de l'équipe, quand ils sont ok pour pousser, ils mettent un :1 dans les commentaires de la pull-request +8. Quand on a 4 ou 5 :1 dans les commentaires, le coordinateur (ldidry) pousse dans master, update le statut à "Publié" dans les branches master et gh-pages. +9. goto 1 GIT : petit guide à l'usage du débutant --------------------------------------- From 5c0a2ebf096d44284da4abb3d7d2058bfcf1da91 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sun, 14 Jul 2013 12:15:51 +0200 Subject: [PATCH 08/25] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ça m'apprendra à pas faire d'aperçu avant de commiter --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b5d6b71a..7c7a8404 100644 --- a/README.md +++ b/README.md @@ -14,13 +14,14 @@ Pour discuter, on a une mailing-list : plongez-dans-python-3@framalistes.org. In Ensuite, il faut nous envoyer un petit mail sur cette liste en nous donnant votre pseudo github, qu'on vous ajoute au groupe qui a les droits sur ce dépôt, histoire de pouvoir bosser. La façon de travailler est assez simple, mais il est primordial de s'y tenir, sinon ça va être le gros bazar. + 1. Passer le statut à "En cours" dans l'en-tête du fichier que vous allez traduire, dans la branche master. 2. Pousser cette modification (ou la refaire) dans la branche gh-pages. 3. Créer, à partir de la branche master, une nouvelle branche portant le nom du fichier à traduire. 4. Traduire. 5. Passer le statut du fichier à "Relecture" dans la branche du fichier, la branche master et la branche gh-pages 6. Faire une pull-request pour pousser la branche du fichier dans la branche master -7. Relecture par les autres membres de l'équipe, quand ils sont ok pour pousser, ils mettent un :1 dans les commentaires de la pull-request +7. Relecture par les autres membres de l'équipe, quand ils sont ok pour pousser, ils mettent un :1 (émoticône pouce vers le haut de github) dans les commentaires de la pull-request 8. Quand on a 4 ou 5 :1 dans les commentaires, le coordinateur (ldidry) pousse dans master, update le statut à "Publié" dans les branches master et gh-pages. 9. goto 1 From 2a210056b9d8b6684966aa573e4c437f1a8bfaf6 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sun, 14 Jul 2013 13:44:08 +0200 Subject: [PATCH 09/25] Marquage du chapitre 2 en 'En cours'. --- 02-your-first-python-program.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02-your-first-python-program.html b/02-your-first-python-program.html index 1fbe5282..8e0e40a7 100755 --- a/02-your-first-python-program.html +++ b/02-your-first-python-program.html @@ -1,6 +1,6 @@ --- title: Votre premier programme en Python -status: Non traduit +status: En cours permalink: your-first-python-program.html --- From 47bb4b4087a63d636f7e10afa71b19f7e88251f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Chauvel?= Date: Sun, 14 Jul 2013 16:26:06 +0200 Subject: [PATCH 10/25] =?UTF-8?q?Quoi=20de=20neuf=20dans=20=E2=80=9CPlonge?= =?UTF-8?q?z=20dans=20Python=203=E2=80=9D=20pass=C3=A9=20en=20statut=20?= =?UTF-8?q?=C2=ABEn=20cours=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 00-whats-new.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/00-whats-new.html b/00-whats-new.html index 24417aa4..5e7952bf 100644 --- a/00-whats-new.html +++ b/00-whats-new.html @@ -1,6 +1,6 @@ --- title: Quoi de neuf dans “Plongez dans Python 3” -status: Non traduit +status: En cours permalink: whats-new.html --- From 1a840f3e65ea75de23008877bc8c49dc4454d79f Mon Sep 17 00:00:00 2001 From: shan-x Date: Sun, 14 Jul 2013 16:47:45 +0200 Subject: [PATCH 11/25] Changement de statut Traduction en cours --- 07-generators.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/07-generators.html b/07-generators.html index da49fce5..281e2d69 100755 --- a/07-generators.html +++ b/07-generators.html @@ -1,6 +1,6 @@ --- title: Fermetures & Générateurs -status: Non traduit +status: En cours permalink: generators.html --- From 7691cc63e965e5012302fcd38cca8f944f5f2e9a Mon Sep 17 00:00:00 2001 From: Gatien Bovyn Date: Sun, 14 Jul 2013 17:22:19 +0200 Subject: [PATCH 12/25] Changement de status pour 05-strings.html --- 05-strings.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-strings.html b/05-strings.html index 619fc3d2..c286a0a8 100755 --- a/05-strings.html +++ b/05-strings.html @@ -1,6 +1,6 @@ --- title: Chaînes de caractères -status: Non traduit +status: En cours permalink: string.html --- From 315518369f74fc1b28ce6225a495de8ce9d44f4b Mon Sep 17 00:00:00 2001 From: Julien Tanguy Date: Sun, 14 Jul 2013 17:42:14 +0200 Subject: [PATCH 13/25] Correction typo permalink chap 16 --- 16-case-study-porting-chardet-to-python-3.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16-case-study-porting-chardet-to-python-3.html b/16-case-study-porting-chardet-to-python-3.html index 7ea80ba0..b6ca2889 100755 --- a/16-case-study-porting-chardet-to-python-3.html +++ b/16-case-study-porting-chardet-to-python-3.html @@ -1,7 +1,7 @@ --- title: Étude de cas : Le portage de chardet vers Python 3 status: Non traduit -permalink: case-study-porting-to-python-3.html +permalink: case-study-porting-chardet-to-python-3.html --- From 3191d8705a728e9bdd7dd99559d839c9e21b5cc3 Mon Sep 17 00:00:00 2001 From: Julien Tanguy Date: Sun, 14 Jul 2013 18:30:09 +0200 Subject: [PATCH 14/25] Supression du : dans le titre du chap 15 --- 16-case-study-porting-chardet-to-python-3.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16-case-study-porting-chardet-to-python-3.html b/16-case-study-porting-chardet-to-python-3.html index b6ca2889..46373073 100755 --- a/16-case-study-porting-chardet-to-python-3.html +++ b/16-case-study-porting-chardet-to-python-3.html @@ -1,5 +1,5 @@ --- -title: Étude de cas : Le portage de chardet vers Python 3 +title: Étude de cas - Le portage de chardet vers Python 3 status: Non traduit permalink: case-study-porting-chardet-to-python-3.html --- From 385799f973ecba64303f4b5b80c2da632db36972 Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Sun, 14 Jul 2013 18:39:07 +0200 Subject: [PATCH 15/25] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7c7a8404..bbfb6fa8 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,8 @@ La façon de travailler est assez simple, mais il est primordial de s'y tenir, s 4. Traduire. 5. Passer le statut du fichier à "Relecture" dans la branche du fichier, la branche master et la branche gh-pages 6. Faire une pull-request pour pousser la branche du fichier dans la branche master -7. Relecture par les autres membres de l'équipe, quand ils sont ok pour pousser, ils mettent un :1 (émoticône pouce vers le haut de github) dans les commentaires de la pull-request -8. Quand on a 4 ou 5 :1 dans les commentaires, le coordinateur (ldidry) pousse dans master, update le statut à "Publié" dans les branches master et gh-pages. +7. Relecture par les autres membres de l'équipe, quand ils sont ok pour pousser, ils mettent un :+1: (émoticône pouce vers le haut de github) dans les commentaires de la pull-request +8. Quand on a 4 ou 5 :+1: dans les commentaires, le coordinateur (ldidry) pousse dans master, update le statut à "Publié" dans les branches master et gh-pages. 9. goto 1 GIT : petit guide à l'usage du débutant From 6f891b5afeefec57ea12edaf7dc3ac29cda01b58 Mon Sep 17 00:00:00 2001 From: Gatien Bovyn Date: Mon, 15 Jul 2013 16:00:09 +0200 Subject: [PATCH 16/25] Corrections typographiques --- 00-index.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/00-index.html b/00-index.html index 96c183ae..6e3f3514 100644 --- a/00-index.html +++ b/00-index.html @@ -21,7 +21,7 @@
 
-

Vous êtes ici :  +

Vous êtes ici :

Plongez dans Python 3

@@ -29,11 +29,11 @@

Plongez dans Python 3

Table des matières (développer)

-

Aussi disponible sur des livres morts !
Plongez dans Python 3
+

Aussi disponible sur des arbres morts !
Plongez dans Python 3

    -
  1. Quoi de neuf dans “Plongez dans Python 3” +
  2. Quoi de neuf dans « Plongez dans Python 3 »
  3. Installer Python
  4. Votre premier programme en Python
  5. Types prédéfinis @@ -47,21 +47,21 @@

    Table des matières (développer)

  6. Refactorisation
  7. Fichiers
  8. XML -
  9. Sérialisation d'objets Python +
  10. Sérialisation d’objets Python
  11. Services Web HTTP -
  12. Étude de cas : Le portage de chardet vers Python 3 +
  13. Étude de cas : Le portage de chardet vers Python 3
  14. Packaging de librairies Python
  15. Porter du code vers Python 3 avec 2to3
  16. Nom des méthodes spéciales -
  17. Où aller maintenant ? +
  18. Où aller maintenant ?
  19. Troubleshooting
-

Ce livre est sous licence libre Creative Commons Attribution Share-Alike. Vous pouvez le télécharger en HTML ou PDF. Les über-geeks peuvent aussi cloner le dépôt Git : +

Ce livre est sous licence libre Creative Commons Attribution - Partage dans les Mêmes Conditions. Vous pouvez le télécharger en HTML ou PDF. Les über-geeks peuvent aussi cloner le dépôt Git :

you@localhost:~$ git clone git://github.com/diveintomark/diveintopython3.git

© 2001–11 Mark Pilgrim -

Traductions : en español, in italiano, на русском языке, به پارسی, česky +

Traductions : en español, in italiano, на русском языке, به پارسی, česky From 1d668cbe90e03397fc3f8ab3ba54f73a29bd1dd1 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 17 Jul 2013 12:37:53 +0200 Subject: [PATCH 17/25] Marquage du chapitre 4 en 'En cours'. --- 04-comprehensions.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-comprehensions.html b/04-comprehensions.html index 3d86280c..5e81f135 100644 --- a/04-comprehensions.html +++ b/04-comprehensions.html @@ -1,6 +1,6 @@ --- title: En compréhension -status: Non traduit +status: En cours permalink: comprehensions.html --- From cf02ea04e01c43a76ec6b8bcd89377902f8a21e7 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Wed, 17 Jul 2013 18:03:06 +0200 Subject: [PATCH 18/25] =?UTF-8?q?D=C3=A9but=20de=20la=20traduction=20du=20?= =?UTF-8?q?chapitre=204=20(environ=20un=20quart).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04-comprehensions.html | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/04-comprehensions.html b/04-comprehensions.html index 5e81f135..41fdcef8 100644 --- a/04-comprehensions.html +++ b/04-comprehensions.html @@ -15,44 +15,44 @@

  
-

You are here: Home Dive Into Python 3 -

Difficulty level: ♦♦♢♢♢ +

Vous êtes ici : Index Plongez dans Python 3 +

Niveau de difficulté : ♦♦♢♢♢

Comprehensions

-

Our imagination is stretched to the utmost, not, as in fiction, to imagine things which are not really there, but just to comprehend those things which are.
Richard Feynman +

Notre imagination est étirée à l’extrême, non pas, comme dans la fiction, à imaginer des choses qui n’existent pas vraiment, mais seulement à comprendre ces choses qui sont là.
Richard Feynman

  -

Diving In

-

Every programming language has that one feature, a complicated thing intentionally made simple. If you’re coming from another language, you could easily miss it, because your old language didn’t make that thing simple (because it was busy making something else simple instead). This chapter will teach you about list comprehensions, dictionary comprehensions, and set comprehensions: three related concepts centered around one very powerful technique. But first, I want to take a little detour into two modules that will help you navigate your local file system. +

Approfondir

+

Tout langage de programmation a cette fonctionnalité, une chose compliquée intentionellement rendue simple. Si vous venez d’un autre langage, vous pourriez facilement la manquer, car votre ancien langage ne la rendait pas simple (parce qu’il était occupé à rendre quelque chose d’autre simple à la place). Ce chapitre vous apprendra à utiliser les listes par compréhension, les dictionnaires par compréhension, et les ensembles par compréhension : ces trois concepts sont centrés autour d’une technique très puissante. Mais d’abord, je vais faire un détour par deux modules qui vous aideront à naviguer à travers votre système de fichiers.

⁂ -

Working With Files And Directories

+

Travailler Avec Des Fichiers Et Des Répertoires.

-

Python 3 comes with a module called os, which stands for “operating system.” The os module contains a plethora of functions to get information on — and in some cases, to manipulate — local directories, files, processes, and environment variables. Python does its best to offer a unified API across all supported operating systems so your programs can run on any computer with as little platform-specific code as possible. +

Python 3 est fourni avec un module appelé os, ce qui signifie « système d’exploitation ». Le module os contient une pléthore de fonctions pour obtenir des informations sur  — et dans certains cas pour manipuler — les répertoires et fichiers locaux, les processus, et les variables d’environnement. Python fait de son mieux pour offrir une API unifiée pour tous les systèmes d’exploitation supportés de façon à ce que vos programmes puissent tourner sur n’importe quel ordinateur avec le moins de code spécifique à une plateforme possible. -

The Current Working Directory

+

Le Répertoire De Travail Actuel

-

When you’re just getting started with Python, you’re going to spend a lot of time in the Python Shell. Throughout this book, you will see examples that go like this: +

Lorsque vous commencez à vous familiariser avec Python, vous passez beaucoup de temps dans le Shell Python. Au cours de ce livre, vous verrez des exemples qui sont présentés de cette façon :

    -
  1. Import one of the modules in the examples folder -
  2. Call a function in that module -
  3. Explain the result +
  4. Importez un des modules du répertoire examples +
  5. Appelez une fonction de ce module +
  6. Expliquez le résultat
- + -

If you don’t know about the current working directory, step 1 will probably fail with an ImportError. Why? Because Python will look for the example module in the import search path, but it won’t find it because the examples folder isn’t one of the directories in the search path. To get past this, you can do one of two things: +

Si vous ne connaissez pas le répertoire de travail, l’étape 1 va probablement échouer avec une ImportError. Pourquoi ? Parce que Pythonn recherchera le module d’exemple dans le chemin de recherche d’import, mais ne le trouvera pas car le dossier examples n’est pas l’un des répertoires du chemin de recherche. Pour régler ce problème, vous avez deux possibilités :

    -
  1. Add the examples folder to the import search path -
  2. Change the current working directory to the examples folder +
  3. Ajouter le dossier examples au chemin de recherche d’import +
  4. Changer le répertoire de travail actuel pour être le dossier examples
-

The current working directory is an invisible property that Python holds in memory at all times. There is always a current working directory, whether you’re in the Python Shell, running your own Python script from the command line, or running a Python CGI script on a web server somewhere. +

Le répertoire de travail courant est une propriété invisible que Python conserve en mémoire en permanence. Il y a toujours un répertoire de travail courant, que vous soyiez dans le Shell Python, que vous exécutiez votre script depuis la ligne de commande ou en temps que script CGI quelque part sur un serveur web. -

The os module contains two functions to deal with the current working directory. +

Le module os contient deux fonctions traitant du répertoire d’exécution actuel.

 >>> import os                                            
@@ -62,15 +62,15 @@ 

The Current Working Directory

>>> print(os.getcwd()) C:\Users\pilgrim\diveintopython3\examples
    -
  1. The os module comes with Python; you can import it anytime, anywhere. -
  2. Use the os.getcwd() function to get the current working directory. When you run the graphical Python Shell, the current working directory starts as the directory where the Python Shell executable is. On Windows, this depends on where you installed Python; the default directory is c:\Python31. If you run the Python Shell from the command line, the current working directory starts as the directory you were in when you ran python3. -
  3. Use the os.chdir() function to change the current working directory. -
  4. When I called the os.chdir() function, I used a Linux-style pathname (forward slashes, no drive letter) even though I’m on Windows. This is one of the places where Python tries to paper over the differences between operating systems. +
  5. Le module os est fournit avec Python ; vous pouvez l’importer de n’importe où, n’importe quand. +
  6. Utilisez la fonction os.getcwd() pour obtenir le répertoire d’exécution. Quand vous utilisez le Shell Python graphique, le répertoire de travail initial est votre répertoire utilisateur. Sous Windows c’est l’endroit où vous avez installé Python, le répertoire par défaut étant c:\Python31. Si vous lancez le Shell Python depuis la ligne de commande, le répertoire de travail initial sera le répertoire d’où vous avez exécuté python3. +
  7. Utilisez la fonction os.chdir() pour changer le répertoire de travail courant. +
  8. Quand j’ai appellé la fonction os.chdir(), j’ai utilisé un nom de chemin tels que ceux utilisé par Linux (slashs, pas de lettre de lecteur) même si je suis sous Windows. C’est un des cas où Python essaye de palier les différences entre les systèmes d’exploitation.
-

Working With Filenames and Directory Names

+

Travailler Avec Les Noms de Fichiers Et De Répertoires

-

While we’re on the subject of directories, I want to point out the os.path module. os.path contains functions for manipulating filenames and directory names. +

Puisque nous sommes en train de parler de répertoires, je voulais vous montrer le module os.path. os.path contient des fonctions pour manipuler les noms de fichiers et de répertoires.

 >>> import os
@@ -83,13 +83,13 @@ 

Working With Filenames and Directory Names

>>> print(os.path.join(os.path.expanduser('~'), 'diveintopython3', 'examples', 'humansize.py')) c:\Users\pilgrim\diveintopython3\examples\humansize.py
    -
  1. The os.path.join() function constructs a pathname out of one or more partial pathnames. In this case, it simply concatenates strings. -
  2. In this slightly less trivial case, calling the os.path.join() function will add an extra slash to the pathname before joining it to the filename. It’s a backslash instead of a forward slash, because I constructed this example on Windows. If you replicate this example on Linux or Mac OS X, you’ll see a forward slash instead. Don’t fuss with slashes; always use os.path.join() and let Python do the right thing. -
  3. The os.path.expanduser() function will expand a pathname that uses ~ to represent the current user’s home directory. This works on any platform where users have a home directory, including Linux, Mac OS X, and Windows. The returned path does not have a trailing slash, but the os.path.join() function doesn’t mind. -
  4. Combining these techniques, you can easily construct pathnames for directories and files in the user’s home directory. The os.path.join() function can take any number of arguments. I was overjoyed when I discovered this, since addSlashIfNecessary() is one of the stupid little functions I always need to write when building up my toolbox in a new language. Do not write this stupid little function in Python; smart people have already taken care of it for you. +
  5. La fonction os.path.join() construit un nom de chemin à partir d’un ou plusieurs noms de chemins partiels. Dans ce cas, il concatène simplement des chaines. +
  6. Dans ce cas un peu moins trivial, appeler la fonction os.path.join() ajoutera un backslash supplémentaire à la fin du nom du chemin avant de le joindre au nom du fichier. C’est un backlash plutôt qu’slash, car j’ai construit cet exemple sur Windows. Si vous le faites sur Linux ou Mac OS X, vous verez un slash à la place. Ne vous embêtez pas avec les (anti)slashs, utilisez toujoursos.path.join() et laissez Python le faire correctement. +
  7. La fonction os.path.expanduser() étendra un chemin qui utilise ~ pour représenter le dossier personnel d’un utilisateur. Ceci fonctionne sur n’importe quelle plateforme sur laquelle les utilisateurs ont un répertoire personne, y compris Linux, Mac OS X, et Windows. Le chemin retourné n’a pas de slash final, mais la fonction os.path.join() n’en a pas besoin. +
  8. En combinant ces deux techniques, vous pouvez facilement construire des chemins pour les répertoires et fichiers dans le répertoire pesonnel de l’utilisateur. La fonction os.path.join() peut prendre autant de paramètres que nécessaire. J’étais aux anges quand j’ai découvert ceci, puisque addSlashIfNecessary() était une de ces stupides petites fonctions que je devais toujous écrire lorsque je construisais ma boîte à outils dans un nouveau langage. N’écrivez pas cette stupide petite fonction en Python ; des personnes intelligentes s’en sont déjà chargées pour vous.
-

os.path also contains functions to split full pathnames, directory names, and filenames into their constituent parts. +

os.path contient également des fonctions pour séparer les noms de chemins, de répertoires, et de fichiers en plusieurs parties.

 >>> pathname = '/Users/pilgrim/diveintopython3/examples/humansize.py'
@@ -106,11 +106,11 @@ 

Working With Filenames and Directory Names

>>> extension '.py'
    -
  1. The split function splits a full pathname and returns a tuple containing the path and filename. -
  2. Remember when I said you could use multi-variable assignment to return multiple values from a function? The os.path.split() function does exactly that. You assign the return value of the split function into a tuple of two variables. Each variable receives the value of the corresponding element of the returned tuple. -
  3. The first variable, dirname, receives the value of the first element of the tuple returned from the os.path.split() function, the file path. -
  4. The second variable, filename, receives the value of the second element of the tuple returned from the os.path.split() function, the filename. -
  5. os.path also contains the os.path.splitext() function, which splits a filename and returns a tuple containing the filename and the file extension. You use the same technique to assign each of them to separate variables. +
  6. La fonction split sépare un chemin complet et retourne un doublet contenant le chemin et le nom du fichier. +
  7. Vous souvenez-vous de quand je vous ai dit d’utiliser l’assignation à plusieurs variables pour retourner plusieurs variables d’une fonction ? La fonction os.path.split() fait exactement ça. Vous pouvez assigner la valeur de retour de la fonction split à un doublet (un tuple à deux éléments). Chacune des variables recevra la valeur de l’élément correspondant du doublet retourné. +
  8. La première variable, dirname, reçoit la valeur du premier élement du doublet retourné par la fonction os.path.split(), le chemin du fichier. +
  9. La seconde variable, filename, reçoit la valeur du second élément du doublet retourné par la fonction os.path.split(), le nom du fichier. +
  10. os.path contient également la fonction os.path.splitext(), qui sépare un nom de fichier et retourne un doublet contenant le nom du fichier, et l’extension du fichier. Vous pouvez utiliser la même technique d’assigner chacune des deux pour séparer les variables.

Listing Directories

From 3671eed9928247088125c9adbd8759ff0c762889 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 18 Jul 2013 23:08:17 +0200 Subject: [PATCH 19/25] =?UTF-8?q?Poursuite=20de=20la=20traduction=20du=20c?= =?UTF-8?q?hapitre=204=20(environ=20la=20moiti=C3=A9).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04-comprehensions.html | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/04-comprehensions.html b/04-comprehensions.html index 41fdcef8..e0de2c2f 100644 --- a/04-comprehensions.html +++ b/04-comprehensions.html @@ -113,11 +113,11 @@

Travailler Avec Les Noms de Fichiers Et De Répertoires

  • os.path contient également la fonction os.path.splitext(), qui sépare un nom de fichier et retourne un doublet contenant le nom du fichier, et l’extension du fichier. Vous pouvez utiliser la même technique d’assigner chacune des deux pour séparer les variables. -

    Listing Directories

    +

    Lister des Répertoires

    -

    The glob module is another tool in the Python standard library. It’s an easy way to get the contents of a directory programmatically, and it uses the sort of wildcards that you may already be familiar with from working on the command line. +

    Le module glob est un autre outil de la bibliothèque standard de Python. C’est une façon simple de récupérer le contenu d’un répertoire programmatiquement, et d’utiliser le genre de jokers avec lesquels vous êtes probablement déjà familier(ère) si vous avez déjà utilisé la ligne de commande. -

    +
     >>> os.chdir('/Users/pilgrim/diveintopython3/')
    @@ -146,14 +146,14 @@ 

    Listing Directories

    'romantest8.py', 'romantest9.py']
      -
    1. The glob module takes a wildcard and returns the path of all files and directories matching the wildcard. In this example, the wildcard is a directory path plus “*.xml”, which will match all .xml files in the examples subdirectory. -
    2. Now change the current working directory to the examples subdirectory. The os.chdir() function can take relative pathnames. -
    3. You can include multiple wildcards in your glob pattern. This example finds all the files in the current working directory that end in a .py extension and contain the word test anywhere in their filename. +
    4. Le module glob prend un schéma et retourne les chemins de tous les fichiers et répertoires qui y correspondent. Dans cet exemple, le joker est le chemin du répertoire plus « *.xml », ce qui correspond à tous les fichiers .xml dans le sous-répertoire examples. +
    5. À présent nous changeons le répertoire de travail pour qu’il soit examples. La fonction os.chdir() accepte les chemins relatifs. +
    6. Vous pouvez inclure plusieurs jokers dans votre schéma glob. Cet exemple trouve tous les fichiers du répertoire de travail courant qui se terminent par l’extension .py et contiennent le mot test n’importe où dans leur nom.
    -

    Getting File Metadata

    +

    Récupérer les Méta-données d’un Fichier

    -

    Every modern file system stores metadata about each file: creation date, last-modified date, file size, and so on. Python provides a single API to access this metadata. You don’t need to open the file; all you need is the filename. +

    Tous les systèmer de fichiers modernes stockent des méta-données à propos de chaque fichier : date de création, de dernière modification, taille du fichier, etc. Python fournit une API unique pour accéder à ces méta-données. Vous n’avez pas besoin d’ouvrir le fichier ; tout ce dont vous avez besoin est le nom du fichier.

     >>> import os
    @@ -168,28 +168,28 @@ 

    Getting File Metadata

    tm_min=25, tm_sec=44, tm_wday=0, tm_yday=194, tm_isdst=1)
      -
    1. The current working directory is the examples folder. -
    2. feed.xml is a file in the examples folder. Calling the os.stat() function returns an object that contains several different types of metadata about the file. -
    3. st_mtime is the modification time, but it’s in a format that isn’t terribly useful. (Technically, it’s the number of seconds since the Epoch, which is defined as the first second of January 1st, 1970. Seriously.) -
    4. The time module is part of the Python standard library. It contains functions to convert between different time representations, format time values into strings, and fiddle with timezones. -
    5. The time.localtime() function converts a time value from seconds-since-the-Epoch (from the st_mtime property returned from the os.stat() function) into a more useful structure of year, month, day, hour, minute, second, and so on. This file was last modified on July 13, 2009, at around 5:25 PM. +
    6. Le répertoire de travail est le dossier examples. +
    7. feed.xml est un fichier du dossier examples. Appeler la fonction os.stat() retourne un objet qui contient différent types de méta-données à propos du fichier. +
    8. st_mtime est la date de dernière modification, mais dans un format qui n’est pas particulièrement utile. (Techniquement, c’est le nombre de secondes depuis Epoch, qui est défini comme la première seconde depuis le 1er janvier 1970. Sérieusement.) +
    9. Le module time fait partie de la bibliothèque standard de Python. Il contient des fonctions pour convertir entre différentes représentations de temps, des formats de valeurs temporelles en chaines, et gérer les fuseau horaires. +
    10. La fonction time.localtime() convertit une valeur temporelle de secondes-depuis-Epoch (à partir de la propriété st_mtime retournée par la fonction os.stat()) en une structure plus utile d’année, mois, jour, heure, minute, seconde, etc. Ce fichier a été modifié pour la dernière fois le 13 juillet 2009, vers 17h25.
    -# continued from the previous example
    +# Poursuite de l’exemple précédent
     >>> metadata.st_size                              
     3070
     >>> import humansize
     >>> humansize.approximate_size(metadata.st_size)  
     '3.0 KiB'
      -
    1. The os.stat() function also returns the size of a file, in the st_size property. The file feed.xml is 3070 bytes. -
    2. You can pass the st_size property to the approximate_size() function. +
    3. La fonction os.stat() retourne aussi la taille du fichier, dans la propriété st_size. Le fichier feed.xml fait 3070 octets. +
    4. Vous pouvez passer la propriété st_size à la fonction approximate_size().

    Constructing Absolute Pathnames

    -

    In the previous section, the glob.glob() function returned a list of relative pathnames. The first example had pathnames like 'examples\feed.xml', and the second example had even shorter relative pathnames like 'romantest1.py'. As long as you stay in the same current working directory, these relative pathnames will work for opening files or getting file metadata. But if you want to construct an absolute pathname — i.e. one that includes all the directory names back to the root directory or drive letter — then you’ll need the os.path.realpath() function. +

    Dans la section précédente, la fonction glob.glob() retournait une liste de chemins relatifs. Le premier exemple avait des chemins tels que 'examples\feed.xml', et le second en avait des encore plus courts, tels que 'romantest1.py'. Du moment que vous restez dans le même répertoire de travail, ces chemins relatifs fonctionneront pour ouvrir des fichiers ou accéder à leurs méta-données. Mais si vous voulez construire un chemin absolu — c’est-à-dire un qui inclut tous les noms de répertoires depuis la racine ou la lettre de lecteur — alors vous aurez besoin de la fonction os.path.realpath().

     >>> import os
    
    From 2edf2dc9a7331724b9dfab209709162296f5c33f Mon Sep 17 00:00:00 2001
    From: Valentin Lorentz 
    Date: Fri, 19 Jul 2013 17:55:51 +0200
    Subject: [PATCH 20/25] Poursuite de la traduction du chapitre 4 (environ trois
     quarts).
    
    ---
     04-comprehensions.html | 28 ++++++++++++++--------------
     1 file changed, 14 insertions(+), 14 deletions(-)
    
    diff --git a/04-comprehensions.html b/04-comprehensions.html
    index e0de2c2f..1d1e51e2 100644
    --- a/04-comprehensions.html
    +++ b/04-comprehensions.html
    @@ -200,11 +200,11 @@ 

    Constructing Absolute Pathnames

    ⁂ -

    List Comprehensions

    +

    Listes Par Comprehensions

    - + -

    A list comprehension provides a compact way of mapping a list into another list by applying a function to each of the elements of the list. +

    Une liste par comprehension est une façon compacte de créer une liste à partir d’une autre en applicant une fonction à chacun des éléments de la liste.

     >>> a_list = [1, 9, 8, 4]
    @@ -216,12 +216,12 @@ 

    List Comprehensions

    >>> a_list [2, 18, 16, 8]
      -
    1. To make sense of this, look at it from right to left. a_list is the list you’re mapping. The Python interpreter loops through a_list one element at a time, temporarily assigning the value of each element to the variable elem. Python then applies the function elem * 2 and appends that result to the returned list. -
    2. A list comprehension creates a new list; it does not change the original list. -
    3. It is safe to assign the result of a list comprehension to the variable that you’re mapping. Python constructs the new list in memory, and when the list comprehension is complete, it assigns the result to the original variable. +
    4. Pour comprendre le sens de ceci, lisez-le de droite à gauche. a_list est la liste de départ. L’interpréteur Python parcourt la liste a_list élément par élément, assignant temporairement chaque élément à la variable elem. Python applique alors la fonction elem * 2 et ajoute le résultat à la liste retournée. +
    5. Une liste par compréhension est une nouvelle liste et non une modification de la liste originale. +
    6. Assigner le résultat d’une compréhension de liste à la variable d’origine est sans risque. Python construit la nouvelle liste en mémoire et, lorsque la nouvelle liste est complète, il assigne le résultat à la variable originale.
    -

    You can use any Python expression in a list comprehension, including the functions in the os module for manipulating files and directories. +

    Vous pouvez utiliser n’importe quelle expression Python pour une liste par compréhension, y compris les fonctions définies dans le module os pour manipuler fichiers et répertoires.

     >>> import os, glob
    @@ -233,11 +233,11 @@ 

    List Comprehensions

    'c:\\Users\\pilgrim\\diveintopython3\\examples\\feed.xml']
      -
    1. This returns a list of all the .xml files in the current working directory. -
    2. This list comprehension takes that list of .xml files and transforms it into a list of full pathnames. +
    3. Ceci retourne une liste de tous les fichiers .xml dans le répertoire de travail. +
    4. Cette liste par compréhension est construite à partir d’une liste de fichiers .xml transformés en chemins complets.
    -

    List comprehensions can also filter items, producing a result that can be smaller than the original list. +

    Les compréhensions de liste peuvent aussi filtrer des éléments, rendant le résultat plus petit que la liste originale.

     >>> import os, glob
    @@ -250,10 +250,10 @@ 

    List Comprehensions

    'romantest9.py']
      -
    1. To filter a list, you can include an if clause at the end of the list comprehension. The expression after the if keyword will be evaluated for each item in the list. If the expression evaluates to True, the item will be included in the output. This list comprehension looks at the list of all .py files in the current directory, and the if expression filters that list by testing whether the size of each file is greater than 6000 bytes. There are six such files, so the list comprehension returns a list of six filenames. +
    2. Pour filtrer une liste, vous pouvez inclure une clause if à la fin de la compréhension de liste. L’expression après le mot-clé if sera évaluée pour chaque élément de la liste. Si l’expression est évaluée à True, l’élément sera inclu dans la sortie. La compréhension de liste regardera la liste de tous les fichiers .py dans le répertoire courant, et l’expression if filtre cette liste en testant si la taille de chaque fichier est supérieure à 6000 octets. Il y a six fichiers répondant à ces critères donc la compréhension de liste retournera une liste de six fichiers.
    -

    All the examples of list comprehensions so far have featured simple expressions — multiply a number by a constant, call a single function, or simply return the original list item (after filtering). But there’s no limit to how complex a list comprehension can be. +

    Tous les exemples de listes par compréhension jusqu’à présent utilisaient des expressions simples — multiplier un nombre par une constance, appeler une unique fonction, ou retourner la liste originale (après filtrage). Mais il n’y a aucune limite à la complexité d’une compréhension de liste.

     >>> import os, glob
    @@ -267,8 +267,8 @@ 

    List Comprehensions

    ('3.3 KiB', 'feed-ns0.xml'), ('3.0 KiB', 'feed.xml')]
      -
    1. This list comprehension finds all the .xml files in the current working directory, gets the size of each file (by calling the os.stat() function), and constructs a tuple of the file size and the absolute path of each file (by calling the os.path.realpath() function). -
    2. This comprehension builds on the previous one to call the approximate_size() function with the file size of each .xml file. +
    3. Cette compréhension de liste trouve tous les fichiers .xml dans le répertoire de travail, récupère la taille de chaque fichier (en appelant la fonction os.stat()), et construit un doublet contenant à la fois la taille du fichier et le chemin absolu de celui-ci (en appelant la fonction os.path.realpath()). +
    4. Cette comprehension se base sur la précédente en appelant la fonctionapproximate_size() avec la taille de chaque fichier .xml.

    ⁂ From 394e61a9c060f9f345a5cbfff486a736764c02bd Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 20 Jul 2013 17:14:46 +0200 Subject: [PATCH 21/25] Fin de la traduction du chapitre 4. --- 04-comprehensions.html | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/04-comprehensions.html b/04-comprehensions.html index 1d1e51e2..61ffb891 100644 --- a/04-comprehensions.html +++ b/04-comprehensions.html @@ -273,9 +273,9 @@

    Listes Par Comprehensions

    ⁂ -

    Dictionary Comprehensions

    +

    Dictionary par Compréhension

    -

    A dictionary comprehension is like a list comprehension, but it constructs a dictionary instead of a list. +

    Un dictionaire par compréhension est comme une liste par compréhension, mais c’est un dictionnaire qui est construit plutôt qu’une liste.

     >>> import os, glob
    @@ -296,15 +296,15 @@ 

    Dictionary Comprehensions

    >>> metadata_dict['alphameticstest.py'].st_size 2509
      -
    1. This is not a dictionary comprehension; it’s a list comprehension. It finds all .py files with test in their name, then constructs a tuple of the filename and the file metadata (from calling the os.stat() function). -
    2. Each item of the resulting list is a tuple. -
    3. This is a dictionary comprehension. The syntax is similar to a list comprehension, with two differences. First, it is enclosed in curly braces instead of square brackets. Second, instead of a single expression for each item, it contains two expressions separated by a colon. The expression before the colon (f in this example) is the dictionary key; the expression after the colon (os.stat(f) in this example) is the value. -
    4. A dictionary comprehension returns a dictionary. -
    5. The keys of this particular dictionary are simply the filenames returned from the call to glob.glob('*test*.py'). -
    6. The value associated with each key is the return value from the os.stat() function. That means we can “look up” a file by name in this dictionary to get its file metadata. One of the pieces of metadata is st_size, the file size. The file alphameticstest.py is 2509 bytes long. +
    7. Ce n’est pas un dictionnaire par compréhension ; c’est une liste par compréhension. La définition prend tous les fichiers .py avec test dans leur nom, puis construit un doublet avec le nom du fichier et les méta-données de celui-ci (obtenues en appelant la fonction os.stat(). +
    8. Chaque élément de la liste résultat est un doublet. +
    9. Ceci est un dictionnaire construit par compréhension. La syntaxe est similaire à celle utilisée pour les listes, à deux différences près. D’abord, des accolades sont utilisées à la place des crochets pour encadrer l’expression. Ensuite, à la place d’une expression pour chaque élément, il y en a deux, séparées par un double point. L’expression avant le double point (f dans cet exemple) est une clé du dictionnaire ; l’expression après le double point (os.stat(f) dans cet exemple) est la valeur associée. +
    10. Un dictionnaire par compréhension est un dictionnaire. +
    11. Les clés de ce dictionnaire sont simplement les noms de fichier retournés par l’appel à glob.glob('*test*.py'). +
    12. La valeur associée à chaque clé est la valeur retournée par la fonction os.stat(). Cela signifie que l’on peut « rechercher » un fichier par son nom dans ce dictionnaire et obtenir ses méta-données. L’une de ces méta-données est la taille du fichier. Le fichier alphameticstest.py fait 2509 octets.
    -

    Like list comprehensions, you can include an if clause in a dictionary comprehension to filter the input sequence based on an expression which is evaluated with each item. +

    Comme pour les listes par compréhension, vous pouvez inclure une clause if pour filtrer la séquence de départ en se basant sur une expression évaluée pour chaque élément.

     >>> import os, glob, humansize
    @@ -316,22 +316,22 @@ 

    Dictionary Comprehensions

    >>> humansize_dict['romantest9'] '6.5 KiB'
      -
    1. This dictionary comprehension constructs a list of all the files in the current working directory (glob.glob('*')), gets the file metadata for each file (os.stat(f)), and constructs a dictionary whose keys are filenames and whose values are the metadata for each file. -
    2. This dictionary comprehension builds on the previous comprehension, filters out files smaller than 6000 bytes (if meta.st_size > 6000), and uses that filtered list to construct a dictionary whose keys are the filename minus the extension (os.path.splitext(f)[0]) and whose values are the approximate size of each file (humansize.approximate_size(meta.st_size)). -
    3. As you saw in a previous example, there are six such files, thus there are six items in this dictionary. -
    4. The value of each key is the string returned from the approximate_size() function. +
    5. Ce dictionnaire par compréhension est construit à partir d’une liste de tous les fichiers dans le répertoire de travail (glob.glob('*')), à laquelle sont associées les méta-données de chaque fichier (os.stat(f)). +
    6. Cette définition est construite à partir de la première, filtrant les fichiers qui qui font moins de 6000 octets (if meta.st_size > 6000), et utilise cette liste filtrée pour construire un dictionnaire dont les clés sont les noms de fichiers auxquels on a retiré l’extension (os.path.splitext(f)[0]) et dont les valeurs sont la taille approximative de chacun de ces fichiers (humansize.approximate_size(meta.st_size)). +
    7. Comme vous l’avez vu dans l’exemple précédent, il y a six fichiers correspondants. Ainsi, il y a six éléments dans le dictionnaire. +
    8. La valeur associée à chacune des clefs est la chaine retournée par la fonction approximate_size().
    -

    Other Fun Stuff To Do With Dictionary Comprehensions

    +

    D’Autres Choses Amusantes À Faire Avec Les Définitions de Dictionnaires Par Compréhension

    -

    Here’s a trick with dictionary comprehensions that might be useful someday: swapping the keys and values of a dictionary. +

    Voici une astuce avec les dictionnaires définis par compréhension qui peut vous être utile un jour : échanger les clefs et les valeurs d’un dictionnaire.

     >>> a_dict = {'a': 1, 'b': 2, 'c': 3}
     >>> {value:key for key, value in a_dict.items()}
     {1: 'a', 2: 'b', 3: 'c'}
    -

    Of course, this only works if the values of the dictionary are immutable, like strings or tuples. If you try this with a dictionary that contains lists, it will fail most spectacularly. +

    Bien sûr, cela ne marche que si les valeurs du dictionnaire sont immuables, comme des chaines ou des n-uplet. Si vous essayez ceci avec un dictionnaire qui contient des listes, cela échouera spectaculairement.

     >>> a_dict = {'a': [1, 2, 3], 'b': 4, 'c': 5}
    @@ -343,9 +343,9 @@ 

    Other Fun Stuff To Do With Dictionary Comprehensions

    ⁂ -

    Set Comprehensions

    +

    Ensembles Définis Par Compréhension

    -

    Not to be left out, sets have their own comprehension syntax as well. It is remarkably similar to the syntax for dictionary comprehensions. The only difference is that sets just have values instead of key:value pairs. +

    Sans les oublier, les ensembles ont leur propre syntaxe pour les définir par compréhension. Elle est remarquablement similaire à la syntaxe utilisée pour les dictionnaires. La seule différence est quùil n’y a que des valeurs au lieu de paires clé:valeur.

     >>> a_set = set(range(10))
    @@ -359,28 +359,28 @@ 

    Set Comprehensions

    {32, 1, 2, 4, 8, 64, 128, 256, 16, 512}
      -
    1. Set comprehensions can take a set as input. This set comprehension calculates the squares of the set of numbers from 0 to 9. -
    2. Like list comprehensions and dictionary comprehensions, set comprehensions can contain an if clause to filter each item before returning it in the result set. -
    3. Set comprehensions do not need to take a set as input; they can take any sequence. +
    4. Les ensembles définis par compréhension peuvent prendre un autre ensemble comme entrée. La définition de l’ensemble claclule le carré de tous les éléments de l’ensemble de 0 à 9. +
    5. Comme les définitions par compréhension de listes et de dictionnaires, celles de dictionnaires peuvent contenir une clause if pour filter les éléments avant de les retourner dans l’ensemble de résultats. +
    6. Une définition par compréhension d’ensemble n’a pas nécessairement besoin d’un autre ensemble comme entrée ; une séquence suffit.

    ⁂ -

    Further Reading

    +

    Aller Plus Loin

    -

    +

    © 2001–11 Mark Pilgrim From 2dfdc5b18adaada25001f41d61430776b39d7e79 Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Sat, 20 Jul 2013 18:04:49 +0200 Subject: [PATCH 22/25] Correction du premier titre. --- 04-comprehensions.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/04-comprehensions.html b/04-comprehensions.html index 61ffb891..beb5006c 100644 --- a/04-comprehensions.html +++ b/04-comprehensions.html @@ -22,7 +22,7 @@

    Comprehensions

    Notre imagination est étirée à l’extrême, non pas, comme dans la fiction, à imaginer des choses qui n’existent pas vraiment, mais seulement à comprendre ces choses qui sont là.
    Richard Feynman

      -

    Approfondir

    +

    Plongée

    Tout langage de programmation a cette fonctionnalité, une chose compliquée intentionellement rendue simple. Si vous venez d’un autre langage, vous pourriez facilement la manquer, car votre ancien langage ne la rendait pas simple (parce qu’il était occupé à rendre quelque chose d’autre simple à la place). Ce chapitre vous apprendra à utiliser les listes par compréhension, les dictionnaires par compréhension, et les ensembles par compréhension : ces trois concepts sont centrés autour d’une technique très puissante. Mais d’abord, je vais faire un détour par deux modules qui vous aideront à naviguer à travers votre système de fichiers.

    ⁂ From eb52584ab3e0e0dcbdea46f45b1b2f537555c046 Mon Sep 17 00:00:00 2001 From: Astalaseven Date: Sat, 20 Jul 2013 22:17:47 +0200 Subject: [PATCH 23/25] =?UTF-8?q?Correction=201=C3=A8re=20moiti=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04-comprehensions.html | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/04-comprehensions.html b/04-comprehensions.html index beb5006c..f1b91e34 100644 --- a/04-comprehensions.html +++ b/04-comprehensions.html @@ -5,7 +5,7 @@ --- -Comprehensions - Dive Into Python 3 +En compréhension - Plongez dans Python 3