# Fichiers #### Fonction open: ##### Ouvrir un fichier: ```python fichier = open("test.py","r") print(fichier) fichier.close() >>> <_io.TextIOWrapper name='test.py' mode='r' encoding='UTF-8'> ``` ##### Ouvrir et afficher un fichier: ```python fichier = open("test.py","r") print(fichier.read()) fichier.close() ``` Autre syntaxe: ```python with open("test.py","r") as fichier: print(fichier.read()) ``` Parcourrir un fichier ligne par ligne: ```python >>> fichier = open("serve.py","r") >>> for x in fichier: ... print(x) ... ``` ##### Ecrire dans un fichier (à la suite, sur une nouvelle ligne): ```python fichier = open("test.py","a") fichier.write("\n\n\"\"\" Commentaire \"\"\"") fichier.close() ``` ##### Type d'ouverture: ```python r, pour une ouverture en lecture (READ). w, pour une ouverture en écriture (WRITE), à chaque ouverture le contenu du fichier est écrasé. Si le fichier n'existe pas python le crée. a, pour une ouverture en mode ajout à la fin du fichier (APPEND). Si le fichier n'existe pas python le crée. b, pour une ouverture en mode binaire. t, pour une ouverture en mode texte. x, crée un nouveau fichier et l'ouvre pour écriture ``` ##### Test si un fichier existe: ```python import os if os.path.exists("serve.py"): print("Le fichier existe") else: print("Le fichier n'existe pas") ``` ##### Supprimer un fichier: ```python import os if os.path.exists("zz.py"): os.remove("zz.py") ``` ##### Supprimer un dossier: ```python import os if os.path.exists("empty_folder"): os.rmdir("empty_folder") ``` #### Chemins ##### Méthodes: ``` >>> help(os.path) abspath(path) → Retourne un chemin absolu basename(p) → Retourne le dernier élément d'un chemin commonprefix(list) → Retourne le chemin commun le plus long d'une liste de chemins dirname(p) → Retourne le dossier parent de l'élément exists(path) → Test si un chemin existe getaTime(filename) → Retourne la date du dernier accès au fichier [os.stat()] getctime(filename) → Retourne la date du dernier changement de metadonnées du fichier getmTime(filename) → Retourne la date de la dernière modification du fichier getsize(filename) → Retourne la tailkle d'un fichier (en octets) isabs(s) → Test si un chemin est absolu isdir(s) → Test si le chemin est un dossier isfile(path) → Test si le chemin est un fichier régulier islink(path) → Test si le chemin est un lien symbolique ismount(path) → Test si le chemin est un point de montage join(path, s) → Ajoute un élément au chemin passé en paramètre normcase(s) → Normalise la casse d'un chemin normpath(path) → Normalise le chemin, élimine les doubles barres obliques, etc. realpath(filename) → Retourne le chemin canonique du nom de fichier spécifié (élimine les liens symboliques) samefile(f1, f2) → Test si deux chemins font référence au même fichier réel sameopenfile(f1, f2) → Test si deux objets de fichiers ouverts font référence au même fichier split(p) → Fractionne un chemin d'accès. Retourne un tuple ``` ##### Exemples: ```python >>> import os.path >>> help(os.path) >>> path = "/Users/bruno/PycharmProjects/webserver/index.py" >>> os.path.dirname(path) '/Users/bruno/PycharmProjects/webserver' >>> os.path.basename(path) 'index.py' >>> os.path.split(path) ('/Users/bruno/PycharmProjects/webserver', 'index.py') >>> os.path.abspath(".") '/Users/bruno' ``` ```python >>> os.listdir(os.path.dirname(path)) ['functions.py', 'server.py', 'index.py', 'serve.py', '__pycache__', 'test.py', 'open.py', '.idea'] ``` ```python # lister récursivement tous les fichiers >>> import os >>> folder = '/Users/bruno/PycharmProjects' >>> for path, dirs, files in os.walk(folder): ... for filename in files: ... print(filename) ... .DS_Store pyvenv.cfg pip3.7 python3 easy_install python .../... ``` ##### Connaître le répertoire courante: ```python >>> import os >>> os.getcwd() '/Users/bruno/PycharmProjects/webserver' ``` ##### Rechercher des éléments par motif ``` * → n'importe quel séquence de caractères ? → n'importe quel caractère [] → n'importe quel caractère listé entre les crochets ``` ```python >>> import glob # Methodes: glob.glob(motif) → Liste les dossiers et les fichiers correspondants au motif glob.iglob(motif) → Idem que glob mais retourne un itérateur # Recherche des fichiers python: >>> glob.glob("/Users/bruno/PycharmProjects/webserver/*.py") ['/Users/bruno/PycharmProjects/webserver/functions.py', '/Users/bruno/PycharmProjects/webserver/server.py', '/Users/bruno/PycharmProjects/webserver/index.py', '/Users/bruno/PycharmProjects/webserver/serve.py', '/Users/bruno/PycharmProjects/webserver/test.py', '/Users/bruno/PycharmProjects/webserver/open.py'] ``` ##### Manipuler les éléments ```python os.makedirs(path) → Créer récursivement tous les dossiers d'un path si ceux-ci n'existent pas os.mkdir(path) → Créer le dernier dossier d'un path. Si un des dossiers n'existe pas une erreur est retournée os.remove(path) → Supprime le fichier / dossier indiqué os.rename(old, new) → Renomme le fichier / dossier indiqué ```