Skip to content

Commit 823a10e

Browse files
committed
Update
1 parent b2b1a2a commit 823a10e

16 files changed

+906
-848
lines changed

.gitignore

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
build
22
.vscode
33
dev.txt
4-
environment.yml
54
*\.ipynb_checkpoints
65
__pycache__/
7-
TODOs.txt
6+
TODOs.txt
7+
/source/_build

environment.yml

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: pythonscript_dev
2+
channels:
3+
- conda-forge
4+
- defaults
5+
dependencies:
6+
- alabaster=0.7.12=py_0
7+
- asn1crypto=0.24.0=py37_1003
8+
- babel=2.7.0=py_0
9+
- ca-certificates=2019.6.16=hecc5488_0
10+
- certifi=2019.6.16=py37_1
11+
- cffi=1.12.3=py37hb32ad35_0
12+
- chardet=3.0.4=py37_1003
13+
- cryptography=2.7=py37hb32ad35_0
14+
- doc8=0.8.0=py_2
15+
- docutils=0.15.2=py37_0
16+
- idna=2.8=py37_1000
17+
- imagesize=1.1.0=py_0
18+
- jinja2=2.10.1=py_0
19+
- markupsafe=1.1.1=py37hfa6e2cd_0
20+
- openssl=1.1.1c=hfa6e2cd_0
21+
- packaging=19.0=py_0
22+
- pbr=5.4.2=py_0
23+
- pip=19.2.2=py37_0
24+
- pycparser=2.19=py37_1
25+
- pygments=2.4.2=py_0
26+
- pyopenssl=19.0.0=py37_0
27+
- pyparsing=2.4.2=py_0
28+
- pysocks=1.7.0=py37_0
29+
- python=3.7.3=h510b542_1
30+
- pytz=2019.2=py_0
31+
- requests=2.22.0=py37_1
32+
- restructuredtext_lint=1.3.0=py_0
33+
- setuptools=41.2.0=py37_0
34+
- six=1.12.0=py37_1000
35+
- snowballstemmer=1.9.0=py_0
36+
- sphinx=2.2.0=py_0
37+
- sphinx_rtd_theme=0.4.3=py_0
38+
- sphinxcontrib-applehelp=1.0.1=py_0
39+
- sphinxcontrib-devhelp=1.0.1=py_0
40+
- sphinxcontrib-htmlhelp=1.0.2=py_0
41+
- sphinxcontrib-jsmath=1.0.1=py_0
42+
- sphinxcontrib-qthelp=1.0.2=py_0
43+
- sphinxcontrib-serializinghtml=1.1.1=py_0
44+
- sqlite=3.29.0=hfa6e2cd_0
45+
- urllib3=1.25.3=py37_0
46+
- vc=14.1=h0510ff6_4
47+
- vs2015_runtime=14.15.26706=h3a45250_4
48+
- wheel=0.33.6=py37_0
49+
- win_inet_pton=1.1.0=py37_0
50+
- wincertstore=0.2=py37_1002
51+
- pip:
52+
- stevedore==1.30.1
53+
+53-55
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# -*- coding: utf-8 -*-
21
"""Script pour récupérer les données d'un fichier log culvert
32
43
Description détaillée:
@@ -25,11 +24,12 @@
2524
CULVERT_FILE_PATH ="culvert_logfile.txt"
2625
###############################################################################
2726

28-
# On déclare un dictionnaire des paramètres qu'on
29-
# va stocker. Chaque "key" du dictionnaire contient
30-
# une liste vide. On a pour objectif d'ajouter les
31-
# informations qu'on trouve dans le fichier à
32-
# chacune de ces listes.
27+
# Indique visuellement le départ de l'exécution du script.
28+
print("Starting...")
29+
30+
# On déclare un dictionnaire des paramètres qu'on va stocker. Chaque "key" du
31+
# dictionnaire contient une liste vide. On a pour objectif d'ajouter les
32+
# informations qu'on trouve dans le fichier à chacune de ces listes.
3333
culvert_data = {
3434
"branch": [],
3535
"name": [],
@@ -41,70 +41,65 @@
4141
"upstream_invert": []
4242
}
4343

44-
# On ouvre le fichier en utilisant le keyword 'with'
45-
# et la fonction 'open' à laquelle on passe le chemin
46-
# du fichier et l'argument "r" (read) pour signifier qu'on
47-
# souhaite uniquement lire le fichier.
48-
# Utiliser 'with' et 'open' garantie que le fichier ouvert
49-
# sera correctement fermé même si une erreur survient
50-
# lorsqu'on travaille avec le fichier ouvert.
51-
with open(CULVERT_FILE_PATH, "r") as f:
52-
# On crée un compteur qu'on va incrémenter
53-
# à chaque fois qu'on va trouver un *culvert*
54-
# dans le fichier texte.
44+
# On ouvre le fichier en utilisant le keyword 'with' et la fonction 'open' à
45+
# laquelle on passe le chemin du fichier et l'argument "r" (read) pour
46+
# signifier qu'on souhaite uniquement lire le fichier. Utiliser 'with' et
47+
# 'open' garantit que le fichier ouvert sera correctement fermé même si une
48+
# erreur survient lorsque le code est exécuté une fois le fichier ouvert.
49+
# On précise le type d'encodage car si le script est utilisé sur une autre
50+
# plateforme, l'encodage par défaut pourrait être différent.
51+
with open(CULVERT_FILE_PATH, "r", encoding="utf-8") as f:
52+
# On crée un compteur qu'on va incrémenter à chaque fois qu'on va trouver
53+
# un *culvert* dans le fichier texte.
5554
culvert_count = 0
5655
# On itère au travers de toutes les lignes du fichier.
5756
for line in f:
58-
# line réfère maintenant à la ligne en cours de lecture.
59-
# Il s'agit d'un objet `string`. Attention, il se
60-
# termine à chaque fois par "\n" qui est un caractère
61-
# spécial représentant un saut de ligne.
57+
# line réfère maintenant à la ligne en cours de lecture. Is'agit d'un
58+
# objet `string`. Attention, il se termine à chaque fois par "\n" qui
59+
# est un caractère spécial représentant un saut de ligne.
6260

63-
# On incrémente le compteur si le texte "START CULVERT"
64-
# se trouve dans la ligne en cours de lecture
61+
# On incrémente le compteur si le texte "START CULVERT" se trouve dans
62+
# la ligne en cours de lecture.
6563
if "START CULVERT" in line:
6664
culvert_count += 1
6765

68-
# On vérifie si la ligne en cours de lecture démarre
69-
# part le texte "Culvert_branch".
66+
# On vérifie si la ligne en cours de lecture démarre part le
67+
# texte "Culvert_branch".
7068
if line.startswith("Culvert_branch"):
71-
# Si oui, on enlève les éventuels espaces blancs
72-
# et caractères spéciaux ("\n", "\t") qui pourrait
73-
# se trouver au début et/ou à la fin --> strip()
74-
# Cette méthode retourne un nouvel objet *string*
75-
# On sépare ensuite la ligne suivant le délimiteur
76-
# " = ". --> split(" = "). Cette méthode retourne
77-
# une *list* de *strings*. Le deuxième et dernier
78-
# élément de cette *list* correspond au nom de
79-
# la branche. On y accède avec [1].
80-
# Finalement, on enlève les apostrophes à la fin
81-
# et au début du nom de la branche --> strip("'")
82-
# Cette méthode retourne un nouvel objet *string*
83-
# auquel est associé le nom branch.
69+
# Si oui, on enlève les éventuels espaces blancs et caractères
70+
# spéciaux ("\n", "\t") qui pourrait se trouver au début et/ou à la
71+
# fin --> strip(). Cette méthode retourne un nouvel objet *string*
72+
# On sépare ensuite la ligne suivant le
73+
# délimiteur " = ". --> split(" = "). Cette méthode retourne une
74+
# *list* de *strings*. Le deuxième et dernier élément de cette
75+
# *list* correspond au nom de la branche. On y accède avec [1].
76+
# Finalement, on enlève les apostrophes à la fin et au début du nom
77+
# de la branche --> strip("'")
78+
# Cette méthode retourne un nouvel objet *string* auquel est
79+
# associé le nom branch.
8480
branch = line.strip().split(" = ")[1].strip("'")
85-
# On ajoute le nom de la branche à la liste de la
86-
# key "branch" du dictionnaire des sorties.
81+
# On ajoute le nom de la branche à la liste de la key "branch" du
82+
# dictionnaire des sorties.
8783
culvert_data["branch"].append(branch)
8884

89-
# On vérifie si la ligne en cours de lecture démarre
90-
# part le texte "Culvert_name".
85+
# On vérifie si la ligne en cours de lecture démarre part le
86+
# texte "Culvert_name".
9187
if line.startswith("Culvert_name"):
92-
# On stocke dans le dictionnaire le nom du culvert
93-
# en cours de lecture.
88+
# On stocke dans le dictionnaire le nom du culvert en cours de
89+
# lecture.
9490
name = line.strip().split(" = ")[1].strip("'")
9591
culvert_data["name"].append(name)
96-
# On vérifie si la ligne en cours de lecture démarre
97-
# part le texte "Culvert_params".
92+
# On vérifie si la ligne en cours de lecture démarre part le
93+
# texte "Culvert_params".
9894
if line.startswith("Culvert_params"):
99-
# On récupère l'ensemble des paramètres dans un objet
100-
# *list* nommé params
95+
# On récupère l'ensemble des paramètres dans un objet *list*
96+
# nommé params
10197
params = line.strip().split(" = ")[1].split(",")
102-
# On unpack chacun des éléments de la liste (6)
103-
# On a maintenant 6 nouveaux noms à disposition
104-
# pour référencer les paramètres du culvert
98+
# On unpack chacun des éléments de la liste (6). On a maintenant
99+
# 6 nouveaux noms à disposition pour référencer les paramètres
100+
# du culvert.
105101
t, d, l, m, uc, ui = params
106-
# On ajoute les paramètres à leur liste dans le
107-
# dictionnaire.
102+
# On ajoute les paramètres à leur liste dans le dictionnaire.
108103
culvert_data["type"].append(t)
109104
culvert_data["diameter"].append(d)
110105
culvert_data["length"].append(l)
@@ -118,6 +113,9 @@
118113
# Un DataFrame est créé à partir de toutes les données du dictionnaires.
119114
df = pd.DataFrame(culvert_data)
120115
# Les données extraites sont enregistrées dans un fichier csv.
121-
# index=False évite d'écrire l'index du DataFrame dans le fichier,
122-
# celui-ci n'étant pas utile ici.
116+
# index=False évite d'écrire l'index du DataFrame dans le fichier, celui-ci
117+
# n'étant pas utile ici.
123118
df.to_csv("culvert_data.csv", index=False)
119+
120+
# Indique visuellement que le script s'est bien executé jusqu'au bout.
121+
print("Done!")

source/avec_des_objets.jpg

9.11 KB
Loading

source/avec_pandas.pdf

9.52 KB
Binary file not shown.

source/comme_matlab.png

4.9 KB
Loading

source/conf.py

-1
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,3 @@
6666

6767
# To allow errors in a notebook
6868
nbsphinx_allow_errors = True
69-

source/data.txt

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
spname,age,gender
2+
Sarah,27,F
3+
Bob,28,M
4+
Rachel,24,F
5+
Bill,22,M

source/environnement.rst

+8-7
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,24 @@ Mettre en place et savoir utiliser correctement son environnement
55
de travail Python est **essentiel**. Celui-ci comprend:
66

77
* **Internet**: bien connaître les sites majeurs (StackOverflow, GitHub, etc.)
8-
permettant de récupérer des informations, du code, et de résoudre les bugs
9-
rencontrés, et trouver des ressources pour apprendre Python.
8+
permettant de récupérer des informations, du code, de résoudre les bugs
9+
rencontrés et trouver des ressources pour apprendre Python.
1010
* Invite de commande (**Command Prompt**): même si l'usage de cet utilitaire
1111
Windows n'est ni intuitif ni esthétique, son maniement basique
1212
se révèle être bien utile pour le contrôle de Python et de ses utilitaires.
13+
(On pourra aussi utiliser **PowerShell** ou **Terminal**).
1314
* Gestionnaire d'environnement (*Environment Manager*): **conda** permet de
14-
gérer les différentes versions de Python et de ses dépendances dont nous
15+
gérer les différentes versions de Python et des dépendances dont nous
1516
avons besoin pour un exécuter un script Python.
1617
* Gestionnaire de package (*Package Manager*): **conda** permet aussi de gérer
1718
l'installation de packages; **pip** est un utilitaire effectuant la même
1819
chose et très présent dans le monde Python.
19-
* Environnement de développement (*IDE*): **Spyder** est un IDE plutôt taillé
20+
* Environnement de développement (*IDE* pour *Integrated Development Environment*): **Spyder** est un IDE plutôt taillé
2021
pour des applications scientifiques, certaines de ses fonctionnalités
2122
le rendent particulièrement appropriés pour l'apprentissage de Python et
2223
l'écriture rapide de scripts.
2324
* Terminal Python: du code **Python** peut être exécuté directement
24-
dans un terminal en *mode interactif*, cela permet de tester
25+
dans un terminal en *mode interactif*, ligne par ligne, cela permet de tester
2526
rapidement des petits morceaux de code (copier/coller depuis un
2627
site internet par exemple) pour répondre aux questions qu'on peut
2728
se poser lorsqu'on apprend le langage ou lorsqu'on écrit un script.
@@ -34,7 +35,7 @@ Stack Overflow
3435

3536
Des recherches Google vont très souvent aboutir à des pages d'un site de
3637
questions/réponses appelés **Stack Overflow (SO)**. Python étant un langage
37-
populaire, la plupart des questions que vous allez vous posez ont déjà été
38+
populaire, la plupart des questions que vous allez vous poser ont déjà été
3839
posées sur ce site (si ce n'est pas le cas, vous vous posez peut-être une
3940
mauvaise question).
4041

@@ -95,7 +96,7 @@ de **Git**, **GitHub** est le site d'hébergement de projets informatique le
9596
plus utilisé (GitLab, BitBucket, SourceForge). Il permet à tout un chacun
9697
d'héberger gratuitement un projet informatique en ligne.
9798

98-
Enormément de projets open-source sont hébergés sur **GitHub**, dont
99+
Énormément de projets open-source sont hébergés sur **GitHub**, dont
99100
`Python <https://github.com/python/cpython>`_ lui-même, `conda <https://github.com/conda/conda>`_,
100101
`pip <https://github.com/pypa/pip>`_, `Spyder <https://github.com/spyder-ide/spyder>`_,
101102
`pandas <https://github.com/pandas-dev/pandas>`__, `QGIS <https://github.com/qgis/QGIS>`_, etc.

source/exercices.rst

+5-5
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ est décrit dans un bloc comme le suivant:
2323
La première ligne marque le début du bloc de définition
2424
d'un *culvert*.
2525
Le nom de la *branch* à laquelle appartient le *culvert* défini est
26-
définie sur la deuxième ligne, le nom du *culvert* sur
26+
défini sur la deuxième ligne, le nom du *culvert* sur
2727
la troisième ligne. La quatrième ligne contient une liste
28-
de 6 paramètres du culvert: type, diameter, length, manning,
29-
upstream chainage, upstream invert.
28+
de 6 paramètres du culvert: *type*, *diameter*, *length*, *manning*,
29+
*upstream chainage*, *upstream invert*.
3030
La cinquième ligne marque la fin du bloc de définition.
3131

32-
Le fichier log peut être téléchargé `ici <https://github.com/maximlt/PythonScript/tree/master/exercices>`_.
32+
Le fichier log peut être téléchargé `ici <https://raw.githubusercontent.com/maximlt/PythonScript/master/exercices/culvert_logfile.txt>`_.
3333

3434
Deux scripts sont à créer. Le premier s'occupera de:
3535

@@ -52,4 +52,4 @@ Le deuxième script s'occupera de:
5252
* enregistrer les données (incluant les données transformées et
5353
les données ajoutées) dans un fichier au format CSV
5454

55-
Une solution à l'exercice est proposée `ici <https://github.com/maximlt/PythonScript/tree/master/exercices/solution>`_.
55+
Une solution à l'exercice est proposée `ici <https://github.com/maximlt/PythonScript/tree/master/exercices/solution>`_.
34.3 KB
Loading

source/index.rst

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ Python dans leur méthode de travail.
2222
Les informations fournies dans le tutoriel sont adaptées à la configuration
2323
suivante:
2424

25-
* Système d'exploitation (OS): **Windows** [7/10]
26-
* Gestionnaire de packages et d'environnement: **Conda** [>=4.7]
27-
* Environnement de développement (IDE): **Spyder** [>=4]
28-
* Langage: **Python 3** [CPython >=3.7]
29-
* Packages: **Numpy** [>=1.16], **pandas** [>=0.25], **Matplotlib** [>=3.1]
25+
* Système d'exploitation (OS): **Windows** [7 ou 10]
26+
* Gestionnaire de packages et d'environnement: **Conda** [4.7]
27+
* Environnement de développement (IDE): **Spyder** [4]
28+
* Langage: **Python 3** [CPython 3.7]
29+
* Packages: **Numpy** [1.16], **pandas** [0.25], **Matplotlib** [3.1]
3030

3131
**A part Windows, tous les logiciels utilisés dans le tutoriel sont
3232
gratuits et open-source**. Leurs auteurs et contributeurs sont remerciés

0 commit comments

Comments
 (0)