Académique Documents
Professionnel Documents
Culture Documents
• Shells
• Outils de développement
• Traitement de fichiers
- Fichiers texte
- Fichiers CSV
SYSTÈME DE FICHIERS
2
Souvent l’information manipulée par les
humains est représentée sous forme de texte
Le texte est donc souvent utilisé pour :
les données fournies à l’ordinateur par un
utilisateur humain (entrée ou “input”)
les données produites par l’ordinateur pour un
utilisateur humain (sortie ou “output”)
3
Un programme peut avoir une ou plusieurs
entrées et une ou plusieurs sorties
Exemple :
entrées = salaire horaire de chaque employé +
nombre d’heures travaillées par chaque employé
sorties = chèques de paie pour chaque employé +
rapport pour l’employeur
4
Lorsqu’il y a peu de données on peut
obtenir l’entrée et produire la sortie
interactivement, par exemple avec la
fonction input de Python
5
Fichier : groupe de données stockées sur
un support matériel persistant (qui
préserve le contenu même lorsqu’il est
éteint)
6
On mesure la capacité de stockage des
supports matériel en MB, GB et TB
(méga/giga/tera octets)
1 MB = 106 octets
1 GB = 109
1 TB = 1012 octets
7
Vu la très grande capacité des supports
matériel de stockage, on stocke
normalement plusieurs fichiers sur un
même support
8
Sur les systèmes d’exploitation modernes,
les fichiers sont organisés hiérarchiquement
pour les regrouper logiquement
10
Un livre spécifique est identifié de façon
unique par le chemin d’accès, par exemple :
bibliothèque, roman, policier, fleming,
goldfinger
11
Dans un système de fichier :
section = répertoire (« directory ») ou dossier
(« folder »)
livre = fichier (« file »)
Exemple, système d’exploitation Unix :
12
Un fichier spécifique est identifié par le
chemin d’accès (« path »), par exemple :
/home/tsikhana/ift1015/prog.py
/ = séparateur de chemin
13
Pour simplifier la gestion de l’espace de
stockage (sauvegarde, mise à niveau,
permissions, etc) le disque dur est configuré
en partitions chacune contenant des fichiers de
même nature
Exemple : un disque dur de 4 TB
Unix : /home
Windows : D:\
Unix : /
Windows : C:\
15
Les noms de fichiers et répertoires sont
composés en général de n’importe quel
caractère sauf «/»(\), mais il est mieux
d’éviter les caractères spéciaux tel que '$',
'!', '&', '*' et l’espace (conflit possible
avec le shell)
Exemples :
Unix :
/home/romeo/voyage-02.09.14/chat.jpg
Windows :
C:\Program Files\Internet Explorer\iexplorer.exe
16
Par convention, on utilise à la fin du nom de fichier
une extension (un point suivi de quelques lettres)
pour indiquer la nature des données
Extensions communes :
17
SHELLS
18
Shell : interprète interactif permettant à
l’usager d’exécuter des commandes de
Système d’exploitation
19
Sous Unix et Mac OS X on a le choix de
plusieurs shells assez similaires en
fonctions
Sous Windows on a le « command
prompt »
20
Mac OS X est bâti sur le noyau Unix
Sous Unix on démarre un shell en ouvrant une
fenêtre de terminal (application “Terminal”,
“xterm”, “Konsole”, …)
21
Il y a plusieurs options:
https://support.iro.umontreal.ca/doku.php?id=acces_distance#pour_
le_diro
23
Le shell a un répertoire de travail (« working
directory ») qui est positionné à un certain
répertoire du système de fichier et la
commande pwd (Unix) affiche son chemin
d’accès (cd sans paramètres sous Windows)
Unix:
Windows:
24
Consulter le contenu du répertoire
Unix
Sans paramètre, la commande ls liste le contenu du
répertoire de travail du shell
Windows
dir
25
Consulter le contenu du répertoire
Windows
dir
26
Le répertoire de travail peut se changer avec la
commande cd (« change directory »)
Sans paramètre à la commande cd
Unix: le répertoire de travail du shell revient au
répertoire maison de l’usager
27
Unix
Lorsque le chemin d’accès débute par « / » c’est
un chemin absolu
/home/tsikhana/ift1016/prog.py
Sinon, c’est un chemin relatif qui désigne un
chemin à partir du répertoire de travail
prog.py (/home/tsikhana/ift1016/ - rép.
de travail)
ift1016/prog.py (/home/tsikhana - rép.
de travail)
28
Windows
Lorsque le chemin d’accès débute par “C:\” où C
représente le nom de la partition de disque dur -
c’est un chemin absolu
Exemple :
C:\Users\tsikh\python\fichiers\abs1.py
Sinon, c’est un chemin relatif qui désigne un chemin
à partir du répertoire de travail
Exemple :
abs1.py si on est dans le répertoire fichiers
fichiers\abs1.py Répertoire de travail:
C:\Users\tsikh\python 29
Dans un chemin d’accès, on peut se servir du
nom « .. » (deux points) pour désigner le
répertoire parent
C’est utile pour naviguer le système de fichier avec la
commande cd :
cd ift1015
ls(Unix) dir(Windows)
cd .. (revenir au répertoire précédent)
30
UNIX-WINDOWS
Unix Windows Action
pwd cd sans paramètres afficher le répertoire de travail
cd path cd path changer le répertoire de travail
32
L’apprentissage d’un langage informatique
comme Python va nécessiter d’écrire des
lignes de codes à l’aide d’un éditeur de
texte
33
Autres éditeurs
Atom, Visual Studio Code, Sublime Text,
emacs, vim, geany . . .
34
Différentes versions de Python
(pour Windows, Unix, etc.) + son
tutoriel original + son manuel de
référence + la documentation des
bibliothèques de fonctions, etc.
sont disponibles en
téléchargement gratuit :
http://www.python.org
35
SPYDER,
IDEPYTHON
i Spyder(Python3.8)
File Edit Search Source Run Debug ConsolesProjects Tools View Help
~ \ !E@~ ~ ;)11~~~I
_Q_fl t! ~: ~: .. 1 ~ ~~ } ,. L+ +~lc:VJ_ser_s\ts_ikh\._spy.--d_er_-p_y3~~~~~~~~=-=_=_=_=_=_=_=_=_=_=_=
C:VJsers
\tsikh
\,spyder-py3\temp,
py IConsole"' I Object
Source
temp,pyEl .------==='.._____.c================
1 # - - coding:utf-8 - Usage
1 UU
2
3 SpyderEditor
4 Hereyoucange helpo anyabjectbypressing Ctrl+1in
5 This is a temporaryscript file. frontofit eitheron heEdior ortheConsole,
1 UU
6
Helpcanalsobeshownautomaticallyafterwritinga left
7 nl=44000 parenthesis
next o anabject.Youcanacivatethis
8 n2=44999 behavior
inPrefere11ces
> Help,
g maxCmp =0
10 nbMaxT =0
11 for i ~n range(44000,45000): Newto Spyder?
Readourtutorial
12 n=l
13 cmp= 0
14 whilen != 1:
15 if n % 2 = 0: Variable
explorer Help Plots Files
16 n = n // 2
17 else:
n = n ·3 +l □ 1/A
Console EJI
18
19 cmp+= 1 62
20 if cmp> maxCmp: 62
21 maxCmp= cmp 62
22 nbMaxT=i 207
23 print(nbMaxT,• •, maxCmp) 176
62
62
fi)
36
CPYTHON
L'interprete CPython est la version officielle de
Python et peut être téléchargé ·ci:
https://www.python.org/downloads/
CPython perlllet d'exécuter de progralllllle a
partir du hell ain i:
xécut r 1 programm
python3 prog.py p r og . py av c l' int rpr te
,._...---=-----=-----=----=----=..-=:.
CPython version 3 ---
39
FICHIERS TEXTE
40
Un fichier texte est un fichier dont le contenu
représente uniquement une suite de caractères
(lettres, chiffres, …)
Fichier texte possède un nom et a pour extension
« txt »
Consulter un fichier texte depuis Python standard
41
TRAITEMENT
DEFICHIERS
codeBoot a des fo et· ons prédéfi •es pour crée des
fichier et lire leur contenu
readFi le(path)
retourne un texte avec tout le contenu du fichier
path (1 s sauts d lign d v· nn nt d '\n')
wri te Fi le ( path, texte)
crée le fichier path ( 'il n' exi te pa déj a) et
rem.place on contenu par texte
codeBoot utilise un system.e de fichier interne au
fur teur t indép ndant d celui du y tem. d' xpl .
•
42
TRAITEMENT
DEFICHIERS
CPython utili 1 y t m d fi.chi r r / 1
Cependant, des méthodes dtfére te ont ut·1· ée
pour 1 op/ ration d' ntr / / orti , notamm nt n
pa ant par la fonction p édéfi ·e open (ouverture de
fi.chi r n mod 1 ctur ou / critur , t xt ou binair )
Pour ·mule dan CPytho le fonct·on de codeBoot
on p ut fair :
def readFile(path):
return open(path, 'rb').read().decode('utf-8')
def writeFile(path, texte):
f = open(path, 'wb')
f.write(texte.encode('utf-8'))
f.close() 43
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIE
petit.txt
tout caracteres : 11
petit li.gnes : 2
44
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIE
Spécification : afficher le o bre de ca actère et le
nombre de ligne contenue dan un fichier
petit.txt
tout caracteres : 11
peti.t li.gnes : 2
readFlle( 'petlt.txt')
'tout\npetit n'
•
t 0 u t n p e t 'l t \n
0 1 2 3 4 5 6 7 8 9 10 45
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIER
Il faut note que la de ·ere lig e d'u fichier texte
pourrait ne pa e terininer par \n
petit.txt
tout caracteres : 10
peti.t lignes: 2
readFlle( 'petlt.txt')
'tout\npetit'
1 t 1 ° 1 uIt I nI P I e I t I l I t 1 -_-_J
0 1 2 3 4 5 6 7 8 9 46
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIER
Progra :me pour codeBoot :
def decouperEnlignes(contenu}:
lignes= contenu.split( '\n'}
if llgnes[-1] == • ·:
lignes.pop(}
return lignes
def tailleFichier(path):
contenu= readFile(path)
lignes= decouperEnlignes(contenu)
print('caracteres =', len(contenu))
print('llgnes =', len(lignes})
tailleFichier('petlt.txt'} 47
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIER
Avec CPython il faut ajouter au début la définition
de la fonction d'entrée/ ortie readFi. le :
def readFlle(path):
return open(path, 'rb').read().decode('utf-8')
def decouperEnlignes(contenu):
llgnes = contenu.spllt('\n')
lf lignes[-1] == '':
llgnes.pop()
return lignes
def tailleFlchler(path):
contenu= readFlle(path)
llgnes = decouperEnllgnes(contenu)
print('caracteres =', len(contenu))
print('lignes =', len(llgnes))
tallleFlchler('petlt.txt') 48
Unix
49
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIE
Ma heureu einent, les aut de ligne ont encodé
différem.Inent dan cliver environnem_ent :
petit.txt \n =='linefeed' (code 10)
tout \r =='carriag r turn' (cod 13)
petit
~readFlle{ 'petit.txt')
•
t 0 u t \r \n p e t 1. t \r \n ncodage ou Window
0 l 2 3 4 5 6 7 8 9 10 11 12
t 0 u t \r p e t
.
1. t \r
ncodag ou ac (mai
d 'p nd du logici 1)
0 l 2 3 4 S 6 7 8 9 10
t 0 u t \n p e t •
1. t \n ncodag ou cod Boot
0 l 2 3 4 5 6 7 8 9 10
linux, Mac OS X, Unix
50
@)
EXEMPLE
: TROUVER
LONGUEUR
D'UN
FICHIE
Pou s'ajuster auto atiqueine t a 'encodage des
fin de ligne utili é par l' environneinent on peut
utili er cette définition de decouperEnL i.gnes :
def decouperEnlignes(contenu):
lignes= contenu.split{'\r\n')
if len(lignes) == 1:
lignes= contenu.split('\r')
if len(lignes) == 1:
lignes - contenu.split( • n')
if lignes[-1] == • •:
lignes.pop{)
return lignes 51
FICHIERS CSV
52
CSV
CSV = “Comma Separated Values”
54
CSV
Excel
Notepad++ fichiersCSV.csv
55
CSV
56
CSV
57
CSV
58
CSV
59
CSV
60
CSV
61
CSV
62
CSV
63
CSV
64
CSV
65
CSV
66
CSV
67
mat2RecArray
68
recArray2Mat
69
CSV
70
CSV
71
CSV
72
LISTMAP
73
MAP
74
MAP
75
EXEMPLE
: FUSION
DEFICHIERS
CSV
Spécification : 1•re un fich •e notesl.csv co tenant
le note de étudiant d'une cla et un fichier
notes2.csv contenant le note a un travail et
n1odifi r 1 fichi r notes3.csv pour y ajout rune
nouvelle colo e pour le travai
notesl.csv
Dubuc,Jean,5,18,8
Gadboi.s,Anne,7,8,1O
Trembtay,Juti.e,18,9,6 notes3.csv
Trembtay,Paut,6,3,6 Dubuc,Jean,5,10,8,7
Vatols,Marle,8,5,5 Gadbols,Anne,7,8,18,1O
Tremblay,Julie,18,9,6,9
Trembtay,Paut,6,3,6,3
notes2.csv Valoi.s,Mari.e,8,5,5,9
Dubuc,Jean,7
Gadbols,Anne,18
Tremblay,Juli.e,9
Trembtay,Paut,3
Vatoi.s,Marie,9 76
EXEMPLE
: FUSION
DEFICHIERS
CSV
ote : ce genre de tra •ten1ent, qui con1b•ne deux
li te en une, e nom.m_efusion ('tnerge')
Ce erait plus général de perlllettre plu ieur
colonne dan le fichi r notes2.csv
notesl.csv
Dubuc,Jean,5,18,8
Gadbois,Anne,7,8,10
Trembtay,Julie,18,9,6 notes3.csv
Tremblay,Paul,6,3,6 Dubuc,Jean,5,18,8,7,4
Vatois,Marie,8,5,5 Gadbols,Anne,7,8,18,10,3
Tremblay,Julle,18,9,6,9,5
Trembtay,Paut,6,3,6,3,2
notes2.csv Valois,Marie,8,5,5,9,9
Dubuc,Jean,7,4
Gadbois,Anne,18,3
Tremblay,Julie,9,5
Trembtay,Paut,3,2
Valols,Marie,9,9 77
EXEMPLE
: FUSION
DEFICHIERS
CSV
Ce serait encore plus général de per1nettre des
rangée 1nanquante dan le fichier notesl.csv et
notes2.csv (qui eront traitée co1nm.ede 0)
notesl.csv
Dubuc,Jean,5,10,8
Gadbols,Anne,7,8,1O
Tremblay,Julle,10,9,6 notes3.csv
Valols,Marle,8,5,S Dubuc,Jean,5,10,8,7,4
Gadbols,Anne,7,8,10,O,8
Tremblay,Julle,18,9,6,0,O
Tremblay,Paul,0,0,0,3,2
notes2.csv Valols,Marle,8,5,5,9,9
Dubuc,Jean,7,4
Tremblay,Paul,3,2
Valols,Marle,9,9
78
EXEMPLE
DEFUSION
DELISTES
DENOMBRE
1 3 5 6
Fusion
0 4 8 9
0 1 3 4 5 6 8 9
79
ALGORITHME
DEFUSION
GÉNÉRAL
nt li t 1 t li t 2
80
EXEMPLE
DEFUSION
DELISTES
DENOMBRE
listel
liste2
liste
résultante O 1 3 4 5 6 8 9
81
EXEMPLE
: FUSION
DESLISTES
DENOMBRE
listel= [l,3,5,6)
.
1
liste2 = [O,4,8,9]
def fuslon(llstel, llste2): j
resuttat = []
l = 0 # • dex du proc a·n élément d ◄ resultat = [O,1,3,4,5,6,8,9]
j = O # index du prochain élément de llste2
white i < ten(llstel) and j < ten(liste2):
if llstel[l] < llste2[j]:
resultat.append(listel[l])
i += 1
else:
resuttat.append(liste2[j])
j += 1
wh·le l < len(llstel): resultat.append(llstel[l]) ; l += 1
white j < len(liste2): resuttat.append(liste2[j]) ; ]• += 1
return resultat
82
print( fusion([l,3,5,6],[0,4,8,9]) )
FUSION
DESNOTES
Il faut avoir i c'est le Illêille noill a la têt des
deux li te , ou plu petit ou plu grand ...
Dubuc,Jean,5,18,8
Ga o s,Anne,7,8,1O
Trembtay,Jutle,10,9,6
Valols,Marle,8,S,S Dubuc,Jean,S,10,8,7,41
Gadbols,Anne,7,8,10,0,0
Trembtay,Jutle,10,9,6,0,0
Dubuc,Jean,7,4 Trembtay,Paut,o,o,o,3,2
rem ay,Paul,3,2 Valols,Marle,8,S,S,9,9
Vatols,Marle,9,9
83
EXEMPLE
: FUSION
DEFICHIERS
CSV
Pou l' algorithn1e de fus· on de ote il faut faire la
cotnparaison des identifiants a la tête de li te
85
EXEMPLE
: FUSION
DEFICHIERS
CSV
S• u e egistre ent exi te seule ent da s une
li te il faut le cotnpléter avec de note 0
Dan ce ca il faut savoir cotnbien de colonnes de
notes il y a dan l'autre li t
Il faut donc fai e un cas spéc"al pour listes de notes
v·des Dubuc,Jean,5,18,8
Gadbols,Anne,7,8,10
Tremblay,Julle,18,9,6
Valols,Marle,8,5,5 Dubuc,Jean,5,10,8,7,4
Gadbols,Anne,7,8,10,8,8
Trembla 8 8
Dubuc Jean 7 4 ----+----.,:.;,--__.,... Trembla , ,2
Trembla Paul,3,2 Valo\.s,Marl.e,
Valois,Marle,9,9
86
EXEMPLE
: FUSION
DEFICHIERS
CSV
87
• • •
resultat = []
i - 8 # index du prochain élément de listel
j = 8 # index du prochain élément de liste2
while i < len(listel) and j < len(liste2):
recl - listel[i]
rec2 = liste2[j]
comp = comparerRec(recl, rec2)
if comp < 0:
resultat.append(struct(id=recl.id,
notes=recl.notes+tabNul2))
i += 1
elif comp > 0:
resultat.append(struct(id=rec2.id,
notes=tabNull+rec2.notes))
j += 1
else:
resultat.append(struct(id=recl.id,
notes=recl.notes+rec2.notes))
i += 1
J• +=
88
•••
• • •
89
EXEMPLE
: FUSION
DEFICHIERS
CSV
Progra1111nefinal:
def lireNotes(path}:
return mat2RecArray(lireCSV(path)}
def ecrireNotes(path, notes):
ecrireCSV(path, recArray2Mat(notes})
def fusionNotesCSV(entreel, entree2, sortie):
notesl - lireNotes(entreel)
notes2 - lireNotes(entree2)
notes3 - fusion(notesl, notes2)
ecrireNotes(sortie, notes3)
fusionNotesCSV( notesl.csv•,
1
•notes2.csv•, 'notes3.csv 1
}
90
GRAPHE
D'APPEL
Graphe de décotnposition fonctionnelle (aus i
connu ou 1 non1 graph de la r lation appelant-
appelé, ou graphe d'appel):
fusi.onNotesCSV
91
valNum texteNum
EXEMPLE
: CONCATÉNATION
Spécification: 1·re un fichier fichiers.txt contenant
une li te de cheillin d' acce de fichier a
concaténer et créer le fichier concatenation.txt
cont nant la concat,, nation d c fichi rs
writeFile('concatenation.txt',
•' .joln(map(readfile,
decouperEnllgnes(readFile('fichiers.txt')))))
93