Il possède un nom et a pour extension $\texttt{'.txt'}$
Remarque : Le bloc-note de Windows ou n'importe quel traitement de texte peut enregistrer les données saisies en un fichier texte ou encore appelé "texte brut".
Lire-Écrire-Ajouter
Lire un fichier $\texttt{'doc.txt'}$ nous permettra soit d'afficher les données qu'il contient soit de collecter une partie d'entre elles et de las stocker dans une liste ou un dictionnaire ...
Commande | Rôle | |
---|---|---|
Ouvrir $\texttt{f}$ | $\texttt{f=open('doc.txt','r')}$ | Ouvre $\texttt{f}$ en mode LECTURE $\texttt{r}$ est mis pour $\texttt{read}$ (lire en français) |
Lire $\texttt{f}$ | $\texttt{f.read()}$ | Affiche le contenu de $\texttt{'doc.txt'}$ dans la console |
$\texttt{f.readlines()}$ | Récupère la liste des lignes de $\texttt{'doc.txt'}$ | |
$\texttt{for a in f :}$ | On parcourt les lignes de $\texttt{f}$. $\texttt{f}$ est donc itérable ! | |
Fermer $\texttt{f}$ | $\texttt{f.close()}$ | Fermer $\texttt{f}$ |
On dispose du fichier texte $\texttt{'fruits.txt'}$ suivant :
fraise kiwi banane orange abricot
f=open('fruits.txt','r')
print(f.read())
f.close()
fraise kiwi banane orange abricot
f=open('fruits.txt','r')
L=f.readlines()
print(L)
f.close()
['fraise\n', 'kiwi\n', 'banane\n', 'orange\n', 'abricot\n']
$\texttt{\n}$ est le symbole qui crée un retour à la ligne dans le fichier texte. (Il signifie $\texttt{"Line feed"}$, "saut de ligne" en français)
Remarque : $\texttt{L = f.readlines()}$ est la liste des lignes de $\texttt{'fruits.txt'}$
f=open('fruits.txt','r')
for a in f :
print(a)
f.close()
fraise kiwi banane orange abricot
Remarque : l'affichage est le même qu'avec $\texttt{read}($$\ )$ sauf qu'en plus les sauts de lignes sont appliqués. Pour éviter les sauts de lignes, on propose :
f=open('fruits.txt','r')
for a in f :
print(a.replace('\n',''))
f.close()
fraise kiwi banane orange abricot
$\texttt{'.'}$ est le séparateur décimal pour $\texttt{Python}$. Exemple : $\texttt{3.5}$ désigne le nombre réel $\texttt{3,5}$
On dispose du fichier $\texttt{'data.txt'}$
3 1,5 4,6
Pour collecter ces trois nombres dans une liste on peut faire :
L=[]
f=open('data.txt','r')
for a in f :
a=a.replace('\n','')
L.append(a.replace(',','.'))
f.close()
print(L)
['3', '1.5', '4.6']
On obtient une liste de chaines de caractères, pour obtenir la liste de nombre réels, on fera :
G=[float(s) for s in L]
print(G)
[3.0, 1.5, 4.6]
Commande | Rôle | |
---|---|---|
Ouvrir $\texttt{f}$ | $\texttt{f=open('doc.txt','w')}$ | Ouvre $\texttt{f}$ en mode ÉCRITURE $\texttt{w}$ est mis pour $\texttt{write}$ (écrire en français) |
Écrire $\texttt{f}$ | $\texttt{f=write('donnees')}$ | Écrit sur $\texttt{f}$ la chaîne de caractères $\texttt{'donnees'}$ |
Si $\texttt{'doc.txt'}$ existe déjà alors son contenu est effacé et $\texttt{Python}$ écrit les nouvelles données | ||
Sinon $\texttt{'doc.txt'}$ est créé et $\texttt{Python}$ écrit les nouvelles données | ||
Fermer $\texttt{f}$ | $\texttt{f.close()}$ | Fermer $\texttt{f}$ |
Exemple
On souhaite écrire les $10$ premiers multiples de $2$ :
$2,4,6,\ldots,20$
f=open('multiples2.txt','w')
f.write('Liste des multiples de 2:')
f.close()
Remarques :
Liste des multiples de 2:
Amélioration du code :
f=open('multiples2.txt','w')
f.write('Liste des multiples de 2:')
for i in range (1,11):
x=2*i
f.write(str(x))
f.close()
print('fini')
fini
Liste des multiples de 2:2468101214161820
il n'y a pas d'espaces entre les différents multiples de 2 !
f=open('multiples2.txt','w')
f.write('Liste des multiples de 2:\n')
s=''
for i in range (1,11):
x=2*i
s = s + '{0:^4},'.format(x)
f.write(s[0:len(s)-1])
f.close()
print('fini')
fini
Liste des multiples de 2: 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20
Écrire un script $\texttt{Python}$ permettant d'obtenir un fichier texte :
Année | bissextile |
---|---|
2000 | Oui |
2001 | Non |
2002 | Non |
.. | .. |
2020 | Oui |
f=open('bissextile.txt','w')
f.write('{0:^10} | {1:^20}\n'.format("année","bisssextile"))
f.write('-'*30+'\n')
for A in range (2000,2021):
if A%4==0 and (A%100>0 or A%400==0):
s = '{0:^10} | {1:^20}\n'.format(A,'Oui')
else :
s = '{0:^10} | {1:^20}\n'.format(A,'Non')
f.write(s)
f.close()
print('fini')
fini
Commande | Rôle | |
---|---|---|
Ouvrir $\texttt{f}$ | $\texttt{f=open('doc.txt','a')}$ | Ouvre $\texttt{f}$ en mode AJOUT $\texttt{a}$ est mis pour $\texttt{append}$ (ajouter en français) |
Écrire $\texttt{f}$ | $\texttt{f=write('donnees')}$ | Ajoute sur $\texttt{f}$ la chaîne de caractères $\texttt{'donnees'}$ |
Si $\texttt{'doc.txt'}$ existe déjà alors son contenu est complété par l'ajout des nouvelles données | ||
Sinon $\texttt{'doc.txt'}$ est créé et $\texttt{Python}$ écrit les nouvelles données | ||
Fermer $\texttt{f}$ | $\texttt{f.close()}$ | Fermer $\texttt{f}$ |
Exemple
On veut ajouter à la fin du fichier $\texttt{'fruits.txt'}$ le message "c'est excellent !"
f=open('fruits.txt','a')
f.write("c'est excellent !")
f.close()
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).
Un fichier CSV permet de traiter des données présentées dans un tableau, avec plus de facilité.
On peut lire un fichier $\texttt{CSV}$ à l'aide d'un tableur comme EXCEL ou OPENOFFICE
Nous souhaiterions ouvrir un fichier $\texttt{CSV}$ avec $\texttt{Python}$ et exploiter les données.
Exemple
Considérons le fichier $\texttt{csv}$ $\texttt{"tableau.csv"}$ correspondant à
A | B | |
---|---|---|
1 | Valeurs de x | Valeurs de y |
2 | 0 | 0,5 |
3 | 2 | -0,5 |
4 | 5 | -2 |
5 | 7 | -3 |
f=open('tableau.csv','r')
print(f.read())
f.close()
Valeurs de x;Valeurs de y 0;0,5 2;-0,5 5;-2 7;-3
Pour mieux accéder à n'importe quel élément de chacune de ces lignes, on préfera utiliser le module $\texttt{csv}$
Important Saisir en préambule :
import csv
Lire le fichier $\texttt{'doc.csv'}$ nous permettra soit d'afficher les données qu'il contient soit de collecter une partie d'entre elles et de les stocker dans une liste ou un dictionnaire ...
Commande | Rôle | |
---|---|---|
Ouvrir $\texttt{f}$ | $\texttt{f=open('doc.csv','r')}$ | Ouvre $\texttt{f}$ en mode LECTURE $\texttt{r}$ |
Ouvrir $\texttt{F}$ | $\texttt{F=csv.reader(f,delimiter=';')}$ | Ouvre l'objet fichier $\texttt{F}$ grâce au module $\texttt{CSV}$ |
Le paramètre $\texttt{delimiter=';'}$ précise que $\texttt{';'}$ sépare les éléments d'une ligne de $\texttt{'doc.csv'}$ | ||
Parcourir $\texttt{F}$ | $\texttt{for a in F :}$ | On parcourt les lignes de $\texttt{F}$. $\texttt{F}$ est donc itérable ! |
Fermer $\texttt{f}$ | $\texttt{f.close()}$ | Fermer $\texttt{f}$ |
import csv
f=open('tableau.csv','r')
F=csv.reader(f,delimiter=';')
for ligne in F :
print(ligne)
f.close()
['Valeurs de x', 'Valeurs de y'] ['0', '0,5'] ['2', '-0,5'] ['5', '-2'] ['7', '-3']
Les éléments de $\texttt{F}$ sont les listes des éléments de chaque ligne de $\texttt{'tableau.csv'}$.
Commande | Rôle | |
---|---|---|
Ouvrir $\texttt{f}$ | $\texttt{f=open('doc.csv','a')}$ | Ouvre $\texttt{f}$ en mode $\texttt{a}$ |
Ouvrir $\texttt{F}$ | $\texttt{F=csv.writer(f,delimiter=';')}$ | Ouvre l'objet fichier $\texttt{F}$ grâce au module $\texttt{CSV}$ |
Le paramètre $\texttt{delimiter=';'}$ précise que $\texttt{';'}$ sépare les éléments d'une ligne de $\texttt{'doc.csv'}$ | ||
Écrire $\texttt{F}$ | $\texttt{F.writerow(['donnee1','donnee2'])}$ | On ajoute la ligne $\texttt{'donnee1';'donnee2'}$ au fichier $\texttt{'doc.csv'}$ |
Fermer $\texttt{f}$ | $\texttt{f.close()}$ | Fermer $\texttt{f}$ |
Exemple
On souhaite ajouter à la fin du fichier $\texttt{tableau.csv}$, sur la même ligne, les nombres $10$ et $20$ :
import csv
f=open('tableau.csv','a')
F=csv.writer(f,delimiter=';')
F.writerow(['10','20'])
f.close()
A | B | C | D | |
---|---|---|---|---|
1 | Valeurs de x | Valeurs de y | ||
2 | 0 | 0,5 | ||
3 | 2 | -0,5 | ||
4 | 5 | -2 | ||
5 | 7 | -3 | ||
6 | 10 | 20 | ||
7 | moyenne des x | 4.8 | moyenne des y | 3.0 |
import csv
import numpy as np
f=open('tableau.csv','r')
F=csv.reader(f,delimiter=';')
X=[]
Y=[]
for s in F : # F est iterable
x=s[0].replace(',','.') # Remplace la virgule par un .
y=s[1].replace(',','.')
X.append(x)
Y.append(y)
A=X[1::]
B=Y[1::]
a = np.mean([float(a) for a in A])
b = np.mean([float(b) for b in B])
print(a,b)
f.close()
4.8 3.0
import csv
import numpy as np
#Lecture des donnees
f=open('tableau.csv','r')
F=csv.reader(f,delimiter=';')
X=[]
Y=[]
for s in F : # F est iterable
x=s[0].replace(',','.') # Remplace la virgule par un .
y=s[1].replace(',','.')
X.append(x)
Y.append(y)
A=X[1::]
B=Y[1::]
a = np.mean([float(a) for a in A])
b = np.mean([float(b) for b in B])
f.close()
#Ecriture des moyennes
f=open('tableau.csv','a')
F=csv.writer(f,delimiter=';')
F.writerow(['moyenne des x',str(a),'moyenne des y',str(b)])
f.close()