• Keine Ergebnisse gefunden

Utilisation du module o.s pour la gestion des fichiers et des répertoires des répertoires

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

3.3. Gestion de répertoires et de fichiers : utilisation du