Vous êtes sur la page 1sur 93

• Système de fichiers 1

• 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

 Lorsqu’il y a beaucoup de données ou


bien on veut préserver les données pour
un usage futur, on stocke les informations
dans un fichier

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)

 Exemples : disque dur, disque compact


(CD, CDRW, DVD), clé USB, carte SD,
ruban magnétique

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

 Il faut donc organiser les fichiers sur le


support matériel… c’est le rôle du
système de fichier (« file system ») du
système d’exploitation de l’ordinateur

8
 Sur les systèmes d’exploitation modernes,
les fichiers sont organisés hiérarchiquement
pour les regrouper logiquement

 Cette organisation facilite la localisation des


fichiers en regroupant les fichiers qui ont un
lien commun

 On peut faire une analogie entre un système


de fichier qui organise des fichiers et une
bibliothèque qui organise des livres
9
 Une bibliothèque est divisée en sections par le
genre (roman, bande dessinée, référence, …), par
le sous-genre (roman policier, roman humour,
roman horreur, …), par l’auteur (Agatha Christie,
Ian Fleming, Stephen King, …), par le titre, etc.

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

3 TB, partition “maison”


(fichiers des usagers)

1 TB, partition “système”


(fichiers du SE ) 14
 Unix : les partitions se greffent à une branche
du système de fichier
 Windows : les partitions ont un nom d’une
lettre qui préfixe le chemin d’accès (et le
séparateur de chemin d’accès est le « \ »)

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

 On se sert souvent d’un shell pour gérer


le système de fichier
 créer et éliminer des fichiers et
répertoires, les lister, les déplacer,
démarrer l’exécution des programmes,
etc.

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 »

 Mêmes principes mais syntaxes


différentes

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”, …)

 Sous Windows: “command prompt” ou invite


de commande

21
 Il y a plusieurs options:

 Utilisez le serveur de l'université de Montréal à distance:


https://acces-web.sens.umontreal.ca/nxwebplayer

 Accès à distance à votre compte DIRO:

https://support.iro.umontreal.ca/doku.php?id=acces_distance#pour_
le_diro

 Windows Subsystem for Linux (Windows 10 and Windows Server


2019)
https://docs.microsoft.com/en-us/windows/wsl/install-win10

 "linux in the browser" :


https://bellard.org/jslinux/vm.html?url=alpine-x86-
xwin.cfg&mem=256&graphic=1
22
 Il y a plusieurs options:

 Utilisez un "linux container" :


https://linuxcontainers.org/lxd/try-it/

 installez linux dans VirtualBox :


https://www.virtualbox.org/wiki/Guest_Oses

 installez linux en "dual boot" :


https://www.instructables.com/How-to-Dual-boot-Linux-and-
Windows-on-a-PC-with-W/

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:

 Au départ le répertoire de travail du shell est le


répertoire maison (« home directory »)

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

 Avec l’interface graphique

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

 Windows: retourne son répertoire de travail

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

ls path dir path lister le contenu du répertoire


path
rm path del path éliminer le fichier path

cp path1 path2 copy path1 path2 copier le fichier path1 à path2

mv path1 path2 move path1 path2 déplacer le fichier path1 à


path2
mkdir path mkdir path créer le répertoire vide path
rmdir path rmdir path éliminer le répertoire vide path
31
OUTILS DE DÉVELOPPEMENT

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

 Si vous êtes débutants, on vous conseille


d’utiliser notepad++ sous Windows,
BBEdit ou CotEditor sous Mac OS X et
getedit sous Linux

33
 Autres éditeurs
 Atom, Visual Studio Code, Sublime Text,
emacs, vim, geany . . .

 Logiciels Microsoft Word, WordPad et


LibreOffice Writer ne sont pas des éditeurs
de texte, ce sont des outils de traitement de
texte qui ne peuvent pas et ne doivent pas
être utilisés pour écrire du code
informatique

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 ---

note : dan certain environnement la commande e nomme


impl m nt python (mai ouv nt ça r'f r a la v r ion 2 d Python) 37
SCÉNARIO
TYPE
(UNIX)
Approche 1 pour développer un prog alllrne a ec
l' interprete CPython :

édition dan emacs et exécution dan le hell

emacs -nw prog.py


mod·fier le fichier prog. py
auv av c C-x C-s
quitter avec C-x C-c
python3 prog.py
38
TRAITEMENT DE FICHIERS
- FICHIERS TEXTE
- FICHIERS CSV

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

Spécification : afficher le oinb e de caracteres et le


non1bre de ligne contenue dan un fichier

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”

 Un fichier CSV est un fichier tableur, contenant


des données (lettres, chiffres)

 Pour chaque ligne, les données sont séparées


par un caractère de séparation (généralement
une virgule, un point-virgule ou une tabulation)

 On peut lire ou créer un fichier CSV à l’aide


d’un tableur comme EXCEL ou OPENOFFICE
53
FICHIER
CSV
Fichier CSV : fichier cont nant une tnatrice 2D de
donnée ou chaque ligne contient une rangée de
donn,, e et le colonne ont ,,par,, e par de
• gules

On p ut ervir d'un chiffrier "I ctronique pour


lire un fichier CSV exista t ou pour créer u fichier
csv

54
CSV
Excel

Enregistrer en format CSV

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

r' r un li t r' ultant id

i li t 1 u li t 2 t vid , aj ut r l' autr li t a la li t r, ultant t r t urn r la


li t r' ultant

it l m1 1 pr mi r 'l 'm nt d 1 li t 1 t l m2 1 pr mi r 'l "rn nt d 1 li t 2

i Z m1 < l n12,r tir r l 1nl d la li t 1 t l' j ut r la fin d la li t r,, ultant

inon, r tir l nz2 d 1 li t 2 t l'ajout ra la fin 1 li t r' ultant

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

# La fonction comparerid(idl,id2) retourne O si les


# deux identifiants sont égaux, -1 si idl est
# plus pet·t que ·d2, et si ·dl est plus grand
# q e id2.
def comparerid{idl, id2):
if idl.nom < id2.nom: return -1
if idl.nom > id2.nom: return 1
if idl.prenom < id2.prenom: return -1
if idl.prenom > id2.prenom: return 1
return 0
def comparerRec{recl, rec2):
return comparerld(recl.id, rec2.id)
84
EXEMPLE
: FUSION
DEFICHIERS
CSV
L'enreg· treille t avec le plus petit identifiant e t
tran féré a la li te ré ultante
Cependant, i deux enregi trelllent ont le même
identifiant il faut contbiner 1 enr gi tr 111ent
(concaténat •on des otes)
Dubuc,Jean,5,10,8
Ga o~s,Anne,7,8,10
Trembtay,Jutle,18,9,6
Vatols,Marle,8,S,S Dubuc,Jean,5,1O,8,7,41
Gadbols,Anne,7,8,18,8,8
Tremblay,Julle,18,9,6,0,8
Dubuc,Jean,7,4 Tremblay,Paul,O,8,O,3,2
Tremb ay,Pau ,3,2 Valols,Harle,8,S,S,9,9
Valols,Marle,9,9

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

def tableauNul(n): ~~---- fonction utilitair pour


return [O]*n ~ créer de tableaux de 0
-
def fusion(listel, liste2):
if len(listel) ==8: return liste2 # cas spéciaux
if len(liste2) ==8: return listel
tabNull = tableauNul(len(listel[G].notes))
tabNul2 = tableauNul(len(liste2[G].notes))
• • •

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
•••
• • •

while i < len(listel):


recl = listel[i]
resultat.append(struct(id=recl.id,
notes=recl.notes+tabNul2))
i += 1
while j < len(liste2):
rec2 = liste2[j]
resultat.append(struct(id=rec2.id,
notes=tabNull+rec2.notes))
j += 1
return resultat

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

li.reNotes fusi.on ecri.reNotes

li.reCSV mat2RecArray tableauNul comparerRec recArray2Mat ecrireCSV

readfi.le cols2Rec comparerid rec2Cols wri.teFi.le


decouperEnli.gnes

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

fichiers. txt intro.txt


lntro.txt Il étalt
corps.txt une fois concatenation. txt
concluslon.txt
Il était
1

corps.txt une fols


une belle une belle
princesse princesse
et une grenouille
charmante.
conclusion.txt
et une grenouille
charmante. 92
EXEMPLE
: CONCATÉNATION

Co positio de readFi le, mapet j oin :

writeFile('concatenation.txt',
•' .joln(map(readfile,
decouperEnllgnes(readFile('fichiers.txt')))))

93

Vous aimerez peut-être aussi