1. 1
Les fichiers sous Python
Lecture, création, écriture
Fichiers texte et CSV
Fichiers JSON et XML
2. 2
Fichiers ?
Fichier - Collection d’informations stockées sur une mémoire de
masse (non volatile, capacité plus importante que la mémoire vive)
Types de fichiers – Ils se distinguent par:
1. Organisation des données : structuré (les tables, BDD), les
informations sont organisées d’une manière particulière qu’il faut
respecter (ex. fichiers d’enregistrements) ; non-structuré, les
informations sont alignées à la suite (ex. fichier texte)
2. Mode d’accès aux données : accès indicé, utilisable comme un
tableau ; accès séquentiel, lecture ou écriture pas à pas (ex. ligne
par ligne dans un fichier texte)
4. 4
Comment Fonctionnent les fichiers:
Accès aux fichiers en Python
En général, pour utiliser un fichier, on a trois étapes fondamentales :
1. L’ouverture du fichier
2. l’opération voulue (lecture / ecriture/ ajout)
3. La fermeture du fichier
Ouverture du fichier :
L’ouverture du fichier doit être la toute première opération effectuée
sur le flux.
Syntaxe : f = open(file, mode = ‘r’, encoding = None)
5. 5
avec :
● file : spécifie le nom du fichier à associer au flux;
● mode (facultatif): spécifie le mode ouvert utilisé pour le flux. Le mode d’ouverture par
défaut est la lecture en mode texte
● encoding (facultatif) : spécifie le type de codage (par exemple, UTF-8 lors de l’utilisation
de fichiers texte). l’encodage par défaut dépend de la plateforme utilisée. L'encodage
détermine comment les caractères sont représentés sous forme de séquences d'octets.
● si l’ouverture réussit, la fonction open() renvoie un objet f; sinon, une exception est
déclenchée
Les modes d’ouverture les plus importants : lecture (r) , Ecriture (w) et ajout ( a)
Rappel : Pour ouvrir le flux en :
– mode binaire, on ajoute la lettre b à la fin de la chaîne , les données ne seront pas
traitées comme du texte mais comme des séquences d'octets bruts.
– mode texte, on ajoute la lettre t à la fin de la chaîne
6. 6
avec :
● file : spécifie le nom du fichier à associer au flux;
● mode (facultatif): spécifie le mode ouvert utilisé pour le flux. Le mode d’ouverture par
défaut est la lecture en mode texte
● encoding (facultatif) : spécifie le type de codage (par exemple, UTF-8 lors de l’utilisation
de fichiers texte). l’encodage par défaut dépend de la plateforme utilisée. L'encodage
détermine comment les caractères sont représentés sous forme de séquences d'octets.
● si l’ouverture réussit, la fonction open() renvoie un objet f; sinon, une exception est
déclenchée
Les modes d’ouverture les plus importants : lecture (r) , Ecriture (w) et ajout ( a)
Rappel : Pour ouvrir le flux en :
– mode binaire, on ajoute la lettre b à la fin de la chaîne , les données ne seront pas
traitées comme du texte mais comme des séquences d'octets bruts.
– mode texte, on ajoute la lettre t à la fin de la chaîne
7. 7
Il existe quatre méthodes (modes) différentes pour ouvrir un fichier:
● "r" -Lecture -Par défaut. Ouvre un fichier en lecture, erreur si le fichier
n'existe pas
● "a" -Ajouter -Ouvre un fichier à ajouter, crée le fichier s'il n'existe pas
● "w" -Écrire -Ouvre un fichier pour l'écriture, crée le fichier s'il n'existe pas
● "x" -Créer -Crée le fichier spécifié, renvoie une erreur si le fichier existe
Fermeture du fichier :
La dernière opération effectuée devrait être la fermeture : f.close(). la fonction ne
renvoie rien mais lève l’exception IOError en cas d’erreur;
Remarque : La fonction strerror() permet de simplifier le code de gestion des
erreurs. elle provient du module os et attend un seul argument (un numéro
d’erreur) .
8. 8
Comment lire un fichier texte
#ouverture en lecture
f= open("voitures.txt","r")
#lecture
s= f.read()
#affichage
print("** contenu de s **")
print(s)
print("** fin contenu **")
#information sur s
print("type de s : ",type(s))
print("longueur de s : ", len(s))
#fermeture
f.close()
Fichier texte à lire : «voitures.txt»
megane
clio
twingo
safrane
laguna
vel satis
•open() permet d’ouvrir un fichier, en lecture
(le rôle de r) ici avec l’option «r». La fonction
renvoie un objet de type fichier stocké dans f
•le curseur de fichier est placé sur la première
ligne
•read() lit tout le contenu du fichier d’un bloc
•close() ferme le fichier (et donc le
déverrouille)
Ouvrir le fichier en lecture
fermer le fichier
f : référence de fichier
Lecture en bloc avec read() (1/2)
9. 9
#ouverture en lecture
f= open("voitures.txt","r")
#lecture
s= f.read()
#affichage
print("** contenu de s **")
print(s)
print("** fin contenu **")
#information sur s
print("type de s : ",type(s))
print("longueur de s : ", len(s))
#fermeture
f.close()
** contenu de s **
megane
clio
twingo
safrane
laguna
vel satis
** fin contenu **
type de s : <class 'str'>
longueur de s : 45
Lecture en bloc avec read() (2/2)
10. Lecture en bloc avec readlines
#ouverture en lecture
f = open("voitures.txt","r")
#lecture
lst= f.readlines()
#affichage
print("** contenu de lst**")
print(lst)
print("** fin contenu **")
#information sur lst
print("type de lst : ",type(lst))
print("longueur de lst : ", len(lst))
#fermeture
f.close()
Le contenu du fichier est
stocké dans une liste, une ligne
= un élément. Le caractère n
est maintenu. Il n’est pas
présent sur la dernière ligne de
notre fichier exemple.
** contenu de lst**
['meganen', 'clion', 'twingon',
'safranen', 'lagunan', 'vel satisn']
** fin contenu **
type de lst : <class 'list'>
longueur de lst : 6
On fait la mm chose open en lecture
Read mnt readlines
11. Remarque : saut de ligne ou pas sur la dernière ligne du fichier
Question : Comment savoir s’il y a un saut de ligne ou pas à la dernière ligne de notre
fichier texte ?
La ligne n°6 est la dernière ligne du
fichier, pas de saut ligne après «velsatis»
Il y a une ligne vide(la n°7) après
«velsatis»
12. Lecture ligne par ligne avec readline(sans «s»)
#ouverture en lecture
f = open("voitures.txt","r")
#lecture ligne itérativement
while True: (tant que ou for)
s = f.readline()
if (s != ""):
print(s) (print(s,end=""))
else:
break;
#fermeture
f.close()
•readline() lit la ligne courante et place le curseur sur la ligne suivante.
(ligne par ligne)
•la fonction renvoie la chaîne vide lorsque nous arrivons à la fin du fichier
(Remarque : s’il y a une ligne blanche entre 2 véhicules, readline() renvoie
le caractère «n», ce n’est pas une chaîne vide).
Il y a une ligne vide entre chaque véhicule parce que le caractère «n»
est toujours là, print() le prend en compte [ Remarque : pour que
print() n’en tienne pas compte, il faudrait faire print(s,end="") ]
megane
clio
twingo
safrane
laguna
vel satis
13. Lecture ligne par ligne en itérant sur l’objet fichier
#ouverture en lecture
f= open("voitures.txt","r")
#lecture ligne itérativement
for s in f:
print (s, len(s))
#fermeture
f.close()
C’est la forme la plus efficace - et la plus concise- pour une lecture
ligne à ligne.
Le caractère n est présent toujours, noter la longueur de la chaîne
(+1 pour toutes sauf la dernière)
14. Ecriture d’un fichier texte avec write()
#ouverture en écriture
f = open("moto.txt","w") (open le fichier en w)
# écriture (écrire les informations )
f.write("honda")
f.write("yamaha")
f.write("ducati")
#fermeture
f.close()
•open() permet d’ouvrir un fichier en
écriture avec l’option «w». La fonction
renvoie un objet de type fichier référencée
par f
•avec «w», le fichier est écrasé s’il existe
déjà
•write() permet d’écrire la chaîne de
caractères
#ouverture en écriture
f = open("moto.txt","w")
#écriture
f.write("hondan")
f.write("yamahan")
f.write("ducati")
#fermeture
f.close()
15. Ecriture d’un fichier texte avec writelines()
writelines() permet d’écrire directement le contenu d’une liste.
Nous devons quand même insérer le caractère «n» pour que le
saut de ligne soit effectif dans le fichier.
#ouverture en écriture
f = open("moto.txt","w")
#liste
lst= ["hondan","yamahan","ducati"]
#écriture
f.writelines(lst)
#fermeture
f.close()
16. Ajout dans un fichier texte
• open() avec l’option «a» permet d’ouvrir un fichier en mode ajout
• write() permet d’écrire la chaîne de caractères
• attention toujours au saut de ligne
• une ouverture en mode lecture / écriture est possible avec l’option
«r+» mais se positionner sur telle ou telle ligne pour y modifier ou
insérer des informations est compliqué.
#ouverture en ajout
f = open("moto.txt","a")
#ajouter un saut de ligne
f.write("n")
#écriture
f.write("laverda")
#fermeture
f.close()
honda
yamaha
ducati
laverda
17. Exercice:
Manipuler les Fichiers TXT avec Python
Ouvrir un fichier en lecture
Afficher le contenu du fichier
Ouvrir les données dans un répertoire
Afficher le fichier
Afficher les 3 caractères
Afficher un certains nbre
Lire ligne par ligne
Ecraser le contenu d'un fichier
18. Solution Exercice:
Manipuler les Fichiers TXT avec Python
# ouvrir en lecture
fichier = open("fichiert_tx.txt","r")
# afficher le fichier
print(fichier.read())
# ouvrir les données dans un repertoire
fichier2 = open("D:fichier_p.txt")
# afficher le fichier
print(fichier2.read())
# afficher les 3caracteres
fichier3 = open("D:fichier_p.txt")
print(fichier3.read(3))
# afficher un certains nbre
# lire une ligne
fichier4 = open("D:fichier_p.txt")
print(fichier4.readline())
# lire ligne par ligne
fichier4 = open("D:fichier_p.txt")
for ligne in fichier4:
print(ligne)
# fermer le fichier
fichier4.close()
# ecrire dans un fichier existant
fichier = open("D:fichier_p.txt","a")
fichier.write ("n"+"4")
fichier.close()
#lire a nouveau
fichier = open("D:fichier_p.txt")
print(fichier.read())
fichier.close()
# ecraser le contenu d'un fichier
fichier = open("D:fichier_p.txt","w")
fichier.write ("new data")
fichier = open("D:fichier_p.txt","r")
print(fichier.read())
fichier.close()
20. Format CSV
Un fichier CSV(Comma-separated values) est un fichier texte (!) avec
une structure tabulaire. Ce type de fichier peut être généré à partir
d’un tableur (Excel ou Calc d’Open/Libre Office). C’est un format
privilégié pour le traitement statistique des données.
21. Lecture du format CSV – Structure de liste
#ouverture en lecture
f= open("personnes.csv","r")
#importation du module csv
import csv
#lecture –utilisation du parseur csv
lecteur= csv.reader(f,delimiter=";")
#affichage –itération sur chaque ligne
for ligne in lecteur:
print (ligne)
#fermeture du fichier
f.close()
Paramétrage du séparateur de
colonnes avec l’option delimiter.
Chaque ligne est une liste.
Remarques :
1.La première ligne est une observation comme une autre.
2.Toutes les valeurs sont considérées comme chaîne de caractères [une
conversion automatique des chiffres est possible, mais elle ne fonctionne pas
si le point décimal est «,» -mieux vaut une conversion explicite avec float() ]
22. Lecture du format CSV –Structure de dictionnaire
#ouverture en lecture
f= open("personnes.csv","r")
#importation du module csv
import csv
#lecture
lecteur= csv.DictReader(f,delimiter=";")
#affichage
for ligne in lecteur:
print (ligne)
#fermeture
f.close() Chaque ligne est un Dict
24. exemple1.py
import json
# lecture (lecture du fichier)
with open ("02-data.json", "r") as read_file:
data = json.load(read_file)
# affichage
for cle in data: (parcourir le fichier)
print("cle: ", cle, " valeur: ", data[cle])
{
"groupe": "Pearl Jam",
"titre_album": "Ten",
"annee": 1991,
"genre": "Alternative",
"titres": {
"1": "Once",
"2": "Even Flow",
"3": "Alive",
"4": "Why Go",
"5": "Black",
"6": "Jeremy",
"7": "Oceans",
"8": "Porch",
"9": "Garden",
"10": "Deep",
"11": "Release"
}
}
C’est un fichier structuré
Pour manipuler les data de type json (site)
02-data.json
Comment manipuler les données
de type json avec Python
Le nom du fichier
Ouvrir en lecture
cle: groupe valeur: Pearl Jam
cle: titre_album valeur: Ten
cle: annee valeur: 1991
cle: genre valeur: Alternative
cle: titres valeur: {'1': 'Once', '2': 'Even
Flow', '3': 'Alive', '4': 'Why Go', '5': 'Black', '6':
'Jeremy', '7': 'Oceans', '8': 'Porch', '9':
'Garden', '10': 'Deep', '11': 'Release'}
https://public.opendatasoft.com/explore/?sort=modified
25. Comment écrire dans un fichier json:
import json
# lecture
with open("02-data.json", "r") as read_file:
data = json.load(read_file)
# affichage
for cle in data:
print("cle: ", cle, " valeur: ", data[cle])
#ecrire-1
with open("03-file.json", "w") as f:
json.dump(data,f,indent=4, ensure_ascii=False, sort_keys=False)
Le nouveau fichier
Option par défaut
26. Comment écrire on utilisant un dictionnaire
#ecrire-2
dictionary = {
"groupe": "Pearl Jam",
"titre_album": "VS",
"annee": 1993,
"genre": "Alternative",
"titres": {
"1": "Go",
"2": "Animal",
"3": "Daughter",
}
}
json_object = json.dumps(dictionary, indent=4)
with open("04-new.json", "w") as outfile:
outfile.write(json_object)
27. Comment lire les données à partir d’un lien ? (import requests)
#lecture lien
r =
requests.get('https://public.opendatasoft.com/api/records/1.0/
search/?dataset=evenements-publics-cibul&q=&facet=tags&fac
et=placename&facet=department&facet=region&facet=city&fa
cet=date_start&facet=date_end&facet=pricing_info&facet=upd
ated_at&facet=city_district')
data = r.json()
print(json.dumps(data, indent = 4, sort_keys=False))
28. from flatten_json import flatten
import csv
#json
json_data = {
"groupe": "Pearl Jam",
"titre_album": "Ten",
"annee": 1991,
"genre": "Alternative",
"titres": {
"1": "Once",
"2": "Even Flow",
"3": "Alive",
"4": "Why Go",
"5": "Black",
"6": "Jeremy",
"7": "Oceans",
"8": "Porch",
"9": "Garden",
"10": "Deep",
"11": "Release"
}
}
#flatten json
json_flatten_data = flatten(json_data)
#fichier csv
file = open(“data.csv", "w")
all_keys = []
for element in json_flatten_data:
all_keys.append(element)
writter = csv.DictWriter(file, all_keys)
writter.writeheader()
writter.writerow(json_flatten_data)
file.close()
1- Convertir un Fichier Json en CSV avec Python
A partir d’un fichier json ?
29. Un fichier JSON(JavaScript Object Notation) est un fichier texte (!)
mais avec une structure standardisée permettant de rendre compte
de l’organisation des données. C’est un format reconnu pour l’
échange de données entre applications. Deux types d’éléments
structurels : (1) des ensembles de paires «nom –valeur» ; (2) des
listes ordonnées de valeur.
#début définition
classPersonne:
"""Classe Personne"""
#constructeur
def__init__(self):
#lister les champs
self.nom = ""
self.age = 0
self.salaire= 0.0
#fin constructeur
… saisie et affichage …
#fin définition
A faire :
(A)Comment sauvegarder un objet de type
Personne dans un fichier ?
(B)Comment sauvegarder une collection (liste) de
personnes.
Exemples
30. Le plus simple : passer par le type dictionnaire
Idée : Le type dict permet de définir une collection d’éléments
prenant la forme «étiquette : valeur ». Nous exploitons cela pour
sauver les champs de l’objet.
# -*-coding: utf-*-
#import Personne
import ModulePersonne as MP
#import module json
Import json
#saisie personne
p = MP.Personne()
p.saisie()
#sauvegarde
f = open("personne.json","w")
#dictionnaire
d = {"Nom":p.nom,"Age":p.age,"Salaire":p.salaire}
#sauver au format json
json.dump(d,f)
#fermer le fichier
f.close();
• noter l’importation du module json
•une étape clé est la transformation de l’objet
référencé par p en un dictionnaire référencé par d
•la fonction dump() de la classe json permet de
stocker l’objet dictionnaire dans le fichier
référencé par f
•il ne faut pas oublier d’ouvrir en écriture puis de
fermer le fichier
•noter le format de fichier json avec les accolades
{} pour délimiter un enregistrement
31. Sauvegarde : astuce, utiliser l’attribut standard __dict__
# -*-coding: utf-*-
#import Personne
import ModulePersonne as MP
#import module json
Import json
#saisie personne
p = MP.Personne()
p.saisie()
#sauvegarde
f = open("personne.json","w")
#sauver au format json
json.dump(p.__dict__,f) #!!! (champ interne de l’objet)
#fermer le fichier
f.close();
Remarque: The json. loads() function is used to parse a JSON string and convert
it into a Python object, while the json. dump() function is used to serialize a
Python object into a JSON formatted string and write it to a file-like object
Idée :Tous les objets Python
(instance de classe) possède
l’attribut standard __dict__, il
recense les champs de la classe
et leurs valeurs pour l’objet. Il est
de type dictionnaire. C’est
exactement ce qu’il nous faut.
-- le code est grandement simplifié
32. Charger l’objet via le type dictionnaire
# -*-coding: utf-*-
#import Personne
import ModulePersonne as MP
#import module json
import json
#ouverture fichier
f = open("personne.json","r")
#chargement
d = json.load(f)
print(d)
print(type(d))
#transf. en Personne
p = MP.Personne()
p.nom = d["Nom"]
p.age = d["Age"]
p.salaire= d["Salaire"]
#affichage
p.affichage()
#fermeture
f.close();
•le fichier est ouvert en lecture maintenant
•load() de la classe json s’occupe du
chargement
•l’objet chargé est de type dict (dictionnaire)
•nous créons une instance de Personne, et
nous recopions les informations
•l’objet référencé par p peut vivre sa vie par la
suite Ex. ici utilisation de la méthode
affichage()
33. Références
De la documentation à profusion
Site du cours
http://eric.univ-lyon2.fr/~ricco/cours/cours_programmation_python.html
Site de Python
Welcometo Python -https://www.python.org/
Python 3.4.3documentation -https://docs.python.org/3/index.html
Portail Python
Page Python de Developpez.com
Quelques cours en ligne
P. Fuchs, P. Poulain, «Cours de Python» sur Developpez.com
G. Swinnen, «Apprendre à programmer avec Python» sur Developpez.com
«Python», Cours interactif sur Codecademy
POLLS (KDnuggets)
Data Mining / AnalyticsTools Used
Python, 4èmeen 2015
What languages you used for data mining / data science?
Python, 3èmeen 2014(derrière R et SAS)