tp_rw_cor1
January 6, 2021
[1]: from numpy import average, array, arange#moyenne en numpy, tableaux
1 Création d’un fichier
[2]: #écriture dans le fichier test f = open('test','w')
f.write('toto et titi\n')
f.write('titi et gros minet\n') f.write('un titi, deux titis\n') f.write('une ligne de texte\n') f.close()
[3]: f = open('test','r') print(f.read()) f.close()
toto et titi
titi et gros minet un titi, deux titis ue ligne de texte
2 Supprimer
Ecrire une fonction
def removeChaine(nameFile, asup):
"""
Supprime la chaine asup du contenu du fichier de nom nameFile et met le résultat dans un fichier de nom nameFile_out
"""
On peut utiliser split etjoin:
[4]: s = 'un mot; un autre; encore un autre' l = s.split(';')
print(l)
res = '-- xx --'.join(l)
print(res)
['un mot', ' un autre', ' encore un autre']
un mot-- xx -- un autre-- xx -- encore un autre [5]: # ************
def removeChaine(nameFile, asup):
"""
Supprime la chaine asup du contenu du fichier de nom nameFile
"""
fich = open(nameFile,'r')#ouvrir en lecture contenu = fich.read()
fich.close()
t = contenu.split(asup) # le decompose en une liste sans asup fich = open(nameFile+'_out','w')#ouvrir avec écrasement
fich.write(u' '.join(t))#concatener puis écrire fich.close()
[6]: nameFile = 'test'
print ('verification avant modif ') fich = open(nameFile,'r')
contenu = fich.read() print(contenu)
fich.close()
removeChaine('test','titi')
print('verification apres modif ') fich = open(nameFile+'_out','r') contenu = fich.read()
print(contenu) fich.close()
verification avant modif toto et titi
titi et gros minet un titi, deux titis ue ligne de texte
verification apres modif toto et
et gros minet un , deux s ue ligne de texte
3 Conserver une ligne sur deux
Ecrire une fonctio
def une_sur_deux(nameFile):
"""conserve une ligne sur deux
et met le résultat dans un fichier de nom nameFile_out
"""
[7]: # ****************
def une_sur_deux(nameFile):
i = 0#compteur de ligne
f1 = open(nameFile,'r')#ouvrir en lecture f2 = open(nameFile+'_out','w')#écriture l = f1.readline()
while l:
if i%2==0:
f2.write(l) l=f1.readline() i+=1
f1.close(); f2.close() [8]: nameFile = 'test'
print ('verification avant modif ') fich = open(nameFile,'r')
contenu = fich.read() print(contenu)
fich.close()
une_sur_deux('test')
print('verification apres modif ') fich = open(nameFile+'_out','r') contenu = fich.read()
print(contenu) fich.close()
verification avant modif toto et titi
titi et gros minet un titi, deux titis ue ligne de texte
verification apres modif toto et titi
un titi, deux titis
4 Un fichier de notes
Dans un fichier textenotes (créé par exemple avec le bloc-note dans le répertoire courant), écrire Nom : Hoareau; Prénom: Jean;Notes : 10 12 6 13
Nom:Dupont ; Prénom : Pierre ; Notes : 4 8 10.5 2 Notes : 6.5 10 11 12; Prénom : José ; Nom : Para Prénom :Marie; Notes : 20 1 12.5 13 ; Nom : Juana
Il y a un élève par ligne. Le nombre de notes est quelconque mais toujours le même dans chaque ligne.
Le séparateur de champs est le point virgule. Dans un sous-champs, le séparateur est le signe deux points.
L’ordre des champs est quelconque. Dans un sous-champs l’information sur la catégorie précède celle sur la valeur.
Il y a un espace entre chaque note, mais pas forcément d’espace entre les champs ni entre la catégorie, les deux points et la valeur.
4.1 Récupérer les informations Ecrire la fonction
def infos(file):
"""retourne une liste de listes
chaque sous-liste contient le nom, le prénom et la liste des notes d'un élève
"""
[12]: # ***********
def normalize(l):
lc = l.split() return ' '.join(lc)
def notes(s):
ln = s.split()
return [float(n) for n in ln]
def traiter(l):
"""traitement d'une ligne"""
lc = l.split(';')#les champs for c in lc:
nc, vc = c.split(':') if 'Prénom' in nc:
p = normalize(vc) elif 'Nom' in nc :
n = normalize(vc) else :
les_notes = notes(vc)
return [n,p,les_notes]
def infos(file):
f = open(file,"r", encoding="utf8") res = []
l = f.readline()# 1ere ligne while l:
res.append(traiter(l))
l = f.readline()#ligne suivante f.close()
return res
4.1.1 Quelques manipulations pour comprendre [13]: l = "Nom: Dupont; Prénom : Pierre; Notes : 12 13"
l.split(";")
[13]: ['Nom: Dupont', ' Prénom : Pierre', ' Notes : 12 13']
[14]: n = ' Pierre de la Rigolade de \n la Poilade ' sn = n.split()
' '.join(sn)
[14]: 'Pierre de la Rigolade de la Poilade' [15]: e1,e2 = ' Prénom : Pierre'.split(":")
e1,e2
[15]: (' Prénom ', ' Pierre') [16]: e2.split()
[16]: ['Pierre']
[17]: ' 12.0 13'.split()
[17]: ['12.0', '13']
[20]: t = infos('notes') t
[20]: [['Hoareau', 'Jean', [10.0, 12.0, 6.0, 13.0]], ['Dupont', 'Pierre', [4.0, 8.0, 10.5, 2.0]], ['Para', 'José', [6.5, 10.0, 11.0, 12.0]], ['Juana', 'Marie', [20.0, 1.0, 12.5, 13.0]]]
[5]: def normalize(l):
lc = l.split() return ' '.join(lc)
normalize (' un nom et un autre nom') [5]: 'un nom et un autre nom'
4.2 Moyenne coefficientée
On utilise la fonction averagede numpy : [24]: from numpy import average
[11]: print(average([10,15]))#tous les coefs égaux
print(round(average([10,15],weights=[1,2]),1))#avec coefs 12.5
13.3
[12]: data = arange(9).reshape((3,3)) print(data)
print(average(data, axis=1, weights=[1,1,1]))#moyenne par ligne print(average(data, axis=0, weights=[1,1,1]))#moyenne par colonne [[0 1 2]
[3 4 5]
[6 7 8]]
[1. 4. 7.]
[3. 4. 5.]