DEV Community

Cover image for Python : Manipulation des dossiers et fichiers
 Eric Le Codeur
Eric Le Codeur

Posted on

Python : Manipulation des dossiers et fichiers

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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']
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

À 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")
Enter fullscreen mode Exit fullscreen mode

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")
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

Discussion (0)