L'échange d'informations via des fichiers texte est un moyen courant de partager des informations entre les programmes.
Avec Python, il est facile de lire des fichiers en texte brut.
Les fichiers texte sont un bon choix pour stocker en permanence des informations simples, pour un certain nombre de raisons. Premièrement, les fichiers texte sont multiplateformes : un fichier texte (brut) sur une machine Windows est le même fichier texte sur un Mac et est le même fichier texte sous Unix. Deuxièmement, les fichiers texte sont faciles à utiliser. La plupart des systèmes d'exploitation sont livrés avec des outils de base pour les afficher et les modifier.
Un fichier texte est un fichier dont l'extension est '.txt'
Pour travailler avec un fichier, il faut commencer par l'ouvrir. Et À la fin, ne pas oublier de le refermer !.
fichier_txt = open("traitement.txt")
fichier_txt.close()
Le fichier texte brute ci-après
#Lire le premier caractère courant
fichier_txt = open("traitement.txt", mode="r", encoding="utf8")
print(fichier_txt.read(1))
#Lire le premier caractère courant
print(fichier_txt.read(1))
#Lire les premiers 8 caractères courants
print(fichier_txt.read(8))
#Lire les 12 caractères courants
print(fichier_txt.readline(12))
fichier_txt.close()
Remarque : Les caractères sont lus et supprimés. On dit que fichier_txt est un itérateur.
fichier_txt = open("traitement.txt", mode="r", encoding="utf8")
print(fichier_txt.readline())
print(fichier_txt.readline())
fichier_txt.close()
#Sous la forme d'une seule chaîne de caractères contenant aussi les caractères non éditables.
fichier_txt = open("traitement.txt", mode="r", encoding="utf8")
tout_str = fichier_txt.read()
fichier_txt.close()
tout_str
#dans une liste dont les éléments sont les lignes du fichier_txt avec leurs caractères non-éditables
fichier_txt = open("traitement.txt", mode="r")
tout_list = fichier_txt.readlines()
fichier_txt.close()
tout_list
for line in tout_list:
print(line)
Avec le gestionnaire de context with
, on n'a plus à se préoccuper de la fermeture du fichier ; elle se fait automatiquement.
with open("traitement.txt", mode="r", encoding="utf8") as f:
tout_str2 = f.read()
with open("traitement.txt", mode="r") as f:
tout_list2 = f.readlines() # tout_list2 est un itérateur
tout_list2
for row in tout_list2:
print(row) #il y a un retour chariot en plus à cause de \n !
for
with open("traitement.txt", mode="r", encoding="utf8") as fichier_txt:
for line in fichier_txt:
print(line)
with open("test.txt", mode='w', encoding='utf-8') as mon_fichier_txt:
mon_fichier_txt.write('Le méchant est un ignorant\n')
mon_fichier_txt.write('Connais-toi toi-même\nVoici ma troisième ligne\n')
#Si mon_fichier_txt n'existe pas encore, il est créé. S'il existe, on écrase son contenu.
Générer, à l'aide d'un programme Python, un fichier .txt, table3.txt, contenant la table de multiplication par 3.
### votre réponse ici
#Utiliser les données d'un fichier pour en créer un autre
with open(r"C:\Users\tchou\OneDrive\Desktop\test2.txt", 'r', encoding='utf8') as fichier_txt: #on utilise la row string pour désactiver les \
with open(r"C:\Users\tchou\OneDrive\Desktop\test3.txt", 'w', encoding='utf8') as fichier_txt2:
for line in fichier_txt:
line = line.split()# On convertit la ligne (une chaîne de caractères) en une liste de mots
line[0] = line[0].upper()
fichier_txt2.write(",".join(line) + '\n')#On reconstitue la ligne
Application 1 :
On dispose d'un fichier nommé data.txt dont le contenu est le suivant :
3,5
4,7
68,001
198,77
Écrire un programme qui permet de créer un fichier, data2.txt dont le contenu est celui de data.txt mais la virgule étant remplacée par un point.
### votre réponse ici
Activité de découverte :
Répondre à ces questions en suivant les liens suivants :
Un fichier CSV (fichier de valeurs séparées par des virgules) est un type de fichier texte brut qui utilise une structuration spécifique pour organiser les données tabulaires. Parce qu'il s'agit d'un fichier texte brut, il ne peut contenir que des données de texte réelles, en d'autres termes, des caractères ASCII ou Unicode imprimables.
Exemple :
nom, prenom, date_naissance, classe
Durand, Jean-Pierre, 23/05/2003, Première A
Bennett, Christine, 15/12/2005, Première F
Massad, Hadjal,12/06/2004, Première D
Traoré, Aminata, 2/03/2004, Première C
En général, le caractère de séparation est appelé délimiteur et la virgule n'est pas la seule utilisée. Les autres délimiteurs courants incluent les caractères de tabulation ( \t ), deux-points ( : ) et point-virgule ( ; ). L'analyse correcte d'un fichier CSV nous oblige à savoir quel délimiteur est utilisé.
Les fichiers au format CSV peuvent être importés et exportés à partir de programmes qui stockent des données dans des tableaux, tels que Microsoft Excel ou OpenOffice Calc.
with open(r"C:\Users\tchou\OneDrive\Desktop\test4.csv", 'r', encoding='utf8') as fichier_txt:
print(fichier_txt.read())
nom
, prenom
et date_naissance
sont appelés des descripteurs alors que, par exemple, Durand
, Bennett
, Massad
et Traoré
sont les valeurs du descripteur nom
.
Application 3 :
Donnez les différentes valeurs du descripteur date_naissance.
### votre réponse ici
On peut ouvrir un fichier csv comme un fichier texte, mais l'analyse des données posera problème. C'est pourquoi on privilégie le module csv car il permet une meilleure manipulation des données par programmation.
Pour la manipulation des données, il est conseillé de créer un objet de lecture des éléments du fichier csv.
import csv
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
#On ouvre l'objet fichier_csv grâce au module csv
#Le paramètre delimiter=',' précise que ',' sépare les éléments d'une ligne de test4.csv
lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
Application 4 :
Créer, en compréhension, une liste personnes contenant les trois entrées ci-dessus :
### Votre réponse ici !
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
#On ouvre l'objet fichier_csv grâce au module csv
#Le paramètre delimiter=',' précise que ',' sépare les éléments d'une ligne de test4.csv
lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
lst_listes = [ligne for ligne in lecteur] # On crée une liste contenant les éléments (des listes) de lecteur
#La première ligne est la ligne d'entêtes (les descripteurs)
#ou simplement
#liste_listes = list(lecteur)
lst_listes
lst_listes[1][2]
Application 5 :
Créer le fichier authentification.csv avec les données suivantes :
Nom, Prénom, Pseudonyme, Mot de passe
Dupont, Pierre, Toto, a1
Martin, Théo, Soleil, a2
Voyant, Claire, Lumière, a3
Conda, Anna, Serpent, a4
Vérification : ouvrir ce fichier avec un éditeur de texte .
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
lecteur = csv.DictReader(fichier_csv) # On crée un itérateur de dictionnaire où la ligne d'en-tête
# est utilisée comme clés dans le dictionnaire
for ligne in lecteur:
print(ligne)
#Pour manipuler les données, on se crée lst_dict
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
lecteur = csv.DictReader(fichier_csv) #On crée un itérateur de dictionnaires
lst_dict = list(lecteur) # On crée une liste contenant les éléments (des dictionnaires) de lecteur
lst_dict[0][" prenom"]
Quelquefois on doit stocker les données dans une structure de données immuable et légère. Dans ce cas, l'utilisation d'un namedtuple pourrait être un bon compromis :
from collections import namedtuple
with open(r"C:\Users\tchou\OneDrive\Desktop\test4.csv", 'r', encoding='utf8') as fichier_csv:
lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
Personne = namedtuple("Personne", next(lecteur), rename=True)
#L'appel à next() récupère la première ligne de données de lecteur, qui contient l'en-tête du fichier CSV.
#Cet en-tête fournit les noms de champ (les descripteurs) pour le fichier namedtuple.
for descripteur in lecteur:
elt = Personne(*descripteur)
print(elt.nom, elt.prenom, elt.date_naissance)
from collections import namedtuple
with open(r"C:\Users\tchou\OneDrive\Desktop\test4.csv", 'r', encoding='utf8') as fichier_csv:
lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
Personne = namedtuple("Personne", next(lecteur), rename=True)
#L'appel à next() récupère la première ligne de données de lecteur, qui contient l'en-tête du fichier CSV.
#Cet en-tête fournit les noms de champ pour le fichier namedtuple.
eleves = [Personne(*descripteur) for descripteur in lecteur]#On crée une liste contenant les tuples nommés de lecteur
eleves