Le cours accéléré Python est gratuit et sera publié ici sur dev.to. Je publierai un nouvel article tous les deux jours environ. Pour ne rien manquer, vous pouvez me suivre sur twitter : Suivez @EricLeCodeur
Manipulation de dossiers et fichiers
Python rend très simple la lecture et écriture de fichiers et dossier. Voici les principales fonctions
Lecture d’un fichier
Voici un fichier test “names.txt”
Mike Taylor
John Desbien
Marc Lacasse
Paul Brown
La fonction “open” permet d’ouvrir un fichier en mode lecture. La fonction readline() permet de lire une ligne dans le fichier. Enfin, la fonction close() permet de fermer le fichier.
filename = 'names.txt'
file = open(filename)
line = file.readline()
file.close()
print(line)
# Mike Taylor
Il est possible de lire toutes les lignes d’un coup avec la fonction readlines(). Cette fonction retournera un tableau avec une entrée pour chaque ligne.
filename = 'names.txt'
file = open(filename)
lines = file.readlines()
file.close()
print(lines)
# ['Mike Taylor\n', 'John Desbien\n', 'Marc Lacasse\n', 'Paul Brown']
Utiliser l’instruction “with”
L’utilisation séparée de la fonction open() et close() n’est pas la façon la plus efficace de travailler avec les fichiers. La raison c’est que si vous oubliez de fermer votre fichier ou que votre application s’arrête brusquement dû à une erreur, le fichier ne serait jamais fermé convenablement.
Il existe une syntaxe qui permettra de gérer la fermeture du fichier automatiquement et cela même en cas d’erreur dans votre application. Pour ce faire il faut utiliser l’instruction “with”.
Voici un exemple :
filename = 'names.txt'
with open(filename) as file:
lines = file.readlines()
print(lines)
Ici l’instruction “with” permet de créer un bloc de code. Les instructions relativent au fichier seront exécuter dans le bloc de code. Une fois le bloc terminé, l’instruction “with” va automatiquement fermer le fichier et nettoyer les références mémoires.
Écriture d’un fichier
Même principe que la lecture. La différence c’est qu’il faut utiliser un argument qui va spécifier le type d’écriture : “w” pour “overwrite” ou “a” pour “append”
names = [
"Mike Taylor/n",
"John Desbien/n",
"Marc Lacasse/n",
"Paul Brown/n"
]
filename = 'names.txt'
with open(filename, "w") as file:
file.writelines(names)
À noter que la fonction writelines() n’inclut pas un caractère “saut de ligne”. Nous l’avons donc ajouté manuellement à la fin de chaque “names”
Créer un dossier
Et si vous désirez placer vos fichiers dans un sous dossier ex: /data ?
La fonction os.mkdir() permet justement de faire cela
import os
os.mkdir("data")
Ici le dossier “data” sera créé dans le dossier en cours. Si le dossier “data” existe déjà une erreur sera retourné.
Pour éviter cette situation il est possible de vérifier si le dossier existe avec la fonction exists()
from genericpath import exists
import os
if not exists("data"):
os.mkdir("data")
Cette fonction peut vérifier autant l’existence d’un dossier que d’un fichier
Créer un fichier CSV
import csv
products = [
{'id': 100, 'name': 'iPadPro'},
{'id': 200, 'name': 'iPhone 12'},
{'id': 300, 'name': 'Charger'},
]
csv_file = 'export.csv'
csv_columns = products[0].keys() # ['id', 'name']
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
for item in products:
writer.writerow(item)
Examinons ce code ligne par ligne:
- Le tableau products est la liste de produit que l’on souhaite exporter en csv
- csv_file est le nom du fichier
- csv_columns est le nom de chaque colonnes du fichier. Le nom des colonnes est le même que le nom des clés du dictionnaires
- writer.writeheaders() va écrire le noms des colonnes sur la première ligne du fichier
- writer.writerow() va écrire chaque ligne du tableau dans le fichier
Path relatif vs absolue
La plupart des fonctions de manipulations de fichiers Python permettent d’utiliser un path relatif ou absolue.
Voici un exemple de chacun
Path relatif
relative_path = "/data"
Le path relatif a comme point de depart le dossier en cours d’exécution. Donc en supposant que le script Python s’exécute du dossier en cours “/users/eric/dev/learn_python/” le path relatif “/data” sera égale à un path absolue : “/users/eric/dev/learn_python/data”
Path absolue
abdolute_path_mac = "/users/eric/dev/learn_python/data"
absolute_path_windowns = "c:\users\eric\dev\learn_python\data"
Le path absolue est le chemin complet pour accéder au dossier/fichier
La plus part des fonctions de manipulation de fichiers supportent les deux type de path (relatif et absolue) et vont s’adapter en conséquence.
Ces deux appels de fonction aurons le meme résultat
import os
os.mkdir("data")
# va créer /users/eric/dev/learn_python/data
os.mkdir("/users/eric/dev/learn_python/data")
# va créer /users/eric/dev/learn_python/data
Conclusion
C'est tout pour aujourd'hui, je publierai un nouvel article tous les deux jours environ. Pour être sûr de ne rien rater vous pouvez me suivre sur twitter : Suivre @EricLeCodeur
Top comments (0)