Chapitre 3 : Gestion de fichiers et traitements de texte sous Python sous Python
3.2. Utilisation du module o.s pour la gestion des fichiers et des répertoires des répertoires
3.2.1. Définir un répertoire de travail
134 Au lancement de python le répertoire de travail courant est celui dans lequel se trouve l'exécutable de l'interpréteur. Sous Windows, c'est C:\Python3X, le X est la version de Python.
Pour afficher le répertoire courant, on fait print(os.getcwd())
Pour choisir un répertoire propre à vous, on fait par exemple : os.chdir("C:/PYTHON TUTORIAL/data" )
On remarque que ce répertoire est défini avec le slash /. Si on veut utiliser l'antislash sous Windows, il faut alors doubler le slash. Exemple
os.chdir("C:\\PYTHON TUTORIAL\\ data" ) # ce qui n'est pas très efficient Pour renvoyer le répertoire courant, on fait :
sys.path[0]
3.2.2. Créer un nouveau dossier dans le répertoire défini
Par exemple créons le dossier nommé « mesdata » dans le répertoire courant.
os.mkdir("mesdata") # mesdata est crée dans le répertoire courant
la fonction mkdir() suppose, à priori, que tous les noms de dossier dans l'arborescence du path sont déjà existants. Si ce n'est pas le cas, il faut utiliser makedirs comme suit:
os.makedirs(path) # où path est le chemin complet
Cette fonction est équivalente à un appel récursif à mkdir() : elle crée récursivement tous les dossiers qui n’existe pas jusqu’au dossier final de path. Exemple :
os.makedirs("C:/dossier1/dossier2/dossier3")
3.2.3. Renommer un dossier dans le répertoire
Pour renommer un dossier, on utilise la fonction os.rename(). Exemple : os.rename("mesdata","mesdata2")
3.2.4. Supprimer un dossier
Pour supprimer un dossier, on utilise la fonction os.rmdir(). Exemple : os.rmdir("mesdata")
3.2.5. Tester si un fichier existe dans le répertoire
135 Pour tester si un fichier existe dans le répertoire courant, on peut utiliser soit la fonction exists() ou la fonction isfile() du module os ou bien la fonction is_file du module pathlib . Exemples : Utilisation de la fonction exists() de os
import os.path
os.path.exists('myfile.txt') # renvoie True ou False selon que le fichier myfile.txt existe.
#instructions conditionnelles os.path.exists('myfile.txt'):
print("Oui le fichier existe") Utilisation de la fonction isfile() de os
import os.path
os.path.isfile('myfile.txt') # renvoie True ou False selon que le fichier myfile.txt existe.
#instructions conditionnelles if os.path.isfile('myfile.txt'):
print("Oui le fichier existe") Utilisation de la fonction is_file() de pathlib import pathlib
x = pathlib.Path('myfile.txt') # définit le fichier
x.is_file() # renvoie True ou False selon que le fichier myfile.txt existe.
#instructions conditionnelles if x.is_file():
print("Oui le fichier existe")
NB : La différence entre la fonction exists() et la fonction isfile() est que la fonction exists() peut renvoyer True pour un dossier lorsque celui-ci exists alors que la fonction isfile() renverra False car il ne s’agit pas d’un fichier.
3.2.6. Supprimer un fichier exitant dans le répertoire
Pour supprimer un fichier, on utilise la fonction os.remove(). Exemple : os.remove("myfile.txt")
Généralement on élabore une suppression conditionnelle qui consiste à exécuter l’instruction de suppression lorsque le fichier existe. Exemple :
import os.path
if os.path.isfile('myfile.txt'):
os.remove('myfile.txt')
136 NB: On peut aussi utilizer la function is_file() du module pathlib tel que présenté ci-dessus.
3.2.7. Lister l'ensemble des fichiers présents dans un répertoire (avec ou sans extensions)
On utilise la fonction os.listdir(). Exemple :
os.listdir() # Indiquer le chemin complet s’il ne s’agit pas du répertoire courant ex :os.listdir("/mydir") Attention, cette fonction listdir liste aussi les dossiers présents dans le répertoire courant.
Pour lister l’ensemble des fichiers ayant une extension définie (ex : .txt), on peut adopter l’une des méthodes suivantes :
# première méthode import os
for file in os.listdir(): # Indiquer le chemin complet s’il ne s’agit pas du répertoire courant ex :os.listdir("/mydir")
if file.endswith(".txt"):
print(file)
#Deuxième méthode import glob, os os.chdir()
for file in glob.glob("*.txt"):
print(file)
NB : Dans la première méthode, on utilise la fonction de traitement endswith() qui permet de prendre en compte tous les suffixes pour sélectionner les fichiers. On peut aussi afficher les fichiers en se basant sur des préfixes. Dans ce cas on va utiliser la fonction startswith(). Ex : import os
for file in os.listdir():
if file.startsswith("myfile"):
print(file)
3.2.8. Découper le chemin complet : la fonction os.path.split()
Cette fonction décompose le path en un tuple de deux éléments le répertoire et le fichier.
Exemple
os.path.split("D:/PYTHON TUTORIAL/data/mydata.txt")
3.2.9. Recomposer le chemin complet à partir d’un chemin et du
nom du fichier : la fonction os.path.joint()
137 Cette fonction fait que le chemin inverse de split() et rassemble un répertoire et un fichier pour former un path complet. Exemple
os.path.join("D:/PYTHON TUTORIAL/data/, "mydata.txt")
3.2.10. Tester si un chemin existe
os.path.exists("D:/PYTHON TUTORIAL/data") # renvoie True ou False
3.2.11. Tester si un chemin conduit à un fichier
os.path.isfile("D:/PYTHON TUTORIAL/data/mydata.txt")# True ou False
3.2.12. Tester si le chemin indiqué est un répertoire
os.path.isdir("D:/PYTHON TUTORIAL/data") Voir aussi
os.walk() # pour la création de fichier en parcourant le chemin de haut en bas ou de bas en haut
os.path.abspath(path) # : qui retourne le chemin absolu du chemin relatif path donné en argument. Il permet aussi de simplifier les éventuelles répétitions de séparateurs.
os.path.realpath(path) #: Retourne le chemin path en remplaçant les liens symboliques par les vrais chemins, et en éliminant les séparateurs excédentaires.
os.path.split(path) # : Sépare path en deux parties à l’endroit du dernier séparateur : la deuxième partie contient le fichier ou le dossier final, et la première contient tout le reste (c’est à dire le chemin pour y accéder). Type retourné 2-tuple of strings
os.path.basename(path) #: Retourne le dernier élément du chemin. Cela revient à appeler :func :~os.path.split et à récupérer le deuxième élément du tuple.
os.path.dirname(path) #: Retourne le chemin pour accéder au dernier élément. Cela revient à appeler :func :~os.path.split et à récupérer le premier élément du tuple.
os.path.expanduser(path) # : Si path est ~ ou ~user, retourne le chemin permettant d’accéder au dossier personnel de l’utilisateur.
os.path.join(path1[, path2[, ... ]]) #: Permet de concaténer plusieurs chemins.
3.2.13. Ouvrir un fichier
138 D’une manière générale, pour ouvrir un fichier on utilise la fonction os.open(). Toutefois, la manière d'utiliser open() dépend selon que le fichier soit déjà existant ou pas, selon qu'il soit ouvert pour lecture seule ou pour écriture, etc...
Exemples
fichier = os.open("mydata.txt", os.O_RDONLY ) # Ouvrir un fichier existant pour lecture seule
fichier = os.open("mydata.txt", os.O_WRONLY ) # Ouvrir un fichier existant pour ecriture seule
fichier = os.open("mydata.txt", os.O_RDWR ) # Ouvrir un fichier existant pour lecture et écriture
fichier = os.open("mydata.txt", os.O_CREAT ) # Créer et Ouvrir un fichier si inexistant
NB : On peut aussi utiliser l'opérateur OU (|) pour faire l'une ou l'autre opération. Exemple:
ouvrir un fichier en lecture et écriture ou créer un fichier inexistant
fichier = os.open("mydata.txt", os.O_RDWR|os.O_CREAT ) Il existe plusieurs opérations à l'ouverture d'un fichier :
os.O_RDONLY: ouvrir en lecture seule os.O_WRONLY: ouvrir en écriture seule os.O_RDWR: ouvrir pour la lecture et l'écriture os.O_NONBLOCK: ouverture sans blocage
os.O_APPEND: ajoute le contenu à chaque écriture os.O_CREAT: Créer le fichier si elle n'existe pas os.O_EXCL: erreur de création si le fichier existe Consulter la documentation R sur la fonction python.
Indiquer l’encodage du fichier
Très souvent, pour lire correctement un fichier, il faut spécifier l’encodage. Par exemple :
x = open('mydata.txt', 'r',encoding='utf-8') # lit un fichier encodé en utf-8
x = open('mydata.txt', 'r',encoding='ascii') # lit un fichier ascii Nous reviendrons plus en détails sur l’encodage des fichiers plus tard.
139