Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| dev:python:manipulation-de-fichiers [2020/11/20 18:58] – yoann | dev:python:manipulation-de-fichiers [2021/02/01 21:51] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 39: | Ligne 39: | ||
| ===== Le context manager ===== | ===== Le context manager ===== | ||
| - | Le code précédent ne garanti | + | Le code précédent ne garantit |
| <code python> | <code python> | ||
| Ligne 48: | Ligne 48: | ||
| </ | </ | ||
| - | ===== ecrire | + | ===== Ecrire |
| + | <code python> | ||
| with open('/ | with open('/ | ||
| # bloc d' | # bloc d' | ||
| for line in range(100): | for line in range(100): | ||
| - | file.write(b' | + | file.write(b' |
| + | # l' | ||
| + | # c = 0xff.to_bytes(1, | ||
| + | </ | ||
| + | |||
| + | Pour vérifier le contenu du fichier, on peut utiliser **od**: | ||
| + | <code bash> | ||
| + | #affiche le flux par valeurs hexadécimales de 1 octet interprétation des valeurs | ||
| + | # en little endian | ||
| + | od --address-radix=d --width=10 --output-duplicates --format=x1 --endian=little / | ||
| + | 0000000 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 | ||
| + | 0000010 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 | ||
| + | 0000020 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 | ||
| + | 0000030 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 | ||
| + | 0000040 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 | ||
| + | 0000050 f0 f0 f0 f0 f0 f0 f0 f0 f0 f0 | ||
| + | 0000060 | ||
| + | </ | ||
| + | |||
| + | ===== Les modes d' | ||
| + | |||
| + | Les modes les plus utilisés: | ||
| + | |||
| + | ^ Mode ^ Description | ||
| + | | " | ||
| + | | " | ||
| + | | " | ||
| + | |||
| + | Le détail des modes d' | ||
| + | |||
| + | ===== Méthodes bas niveau ===== | ||
| + | |||
| + | ==== Méthode read() ==== | ||
| + | |||
| + | La méthode **read()** permet de lire dans un fichier un buffer d'une taille choisit. Si la taille du buffer n'est pas spécifiée, | ||
| + | <code python> | ||
| + | with open('/ | ||
| + | # bloc d' | ||
| + | all_content = file.read() | ||
| + | print(f" | ||
| + | </ | ||
| + | |||
| + | <code python> | ||
| + | with open('/ | ||
| + | # bloc d' | ||
| + | for bloc in range(10): | ||
| + | #lecture par bloc de 4 caractères | ||
| + | print(f" | ||
| + | </ | ||
| + | |||
| + | ==== Méthode flush() ==== | ||
| + | |||
| + | Pour des raisons de performances, | ||
| + | |||
| + | ===== Le module pathlib ===== | ||
| + | |||
| + | Pour opérer sur les chemins, nom de fichiers présents sur l' | ||
| + | |||
| + | On utilisera plutôt **pathlib**: | ||
| + | |||
| + | <code python> | ||
| + | filename = '/ | ||
| + | |||
| + | from pathlib import Path | ||
| + | |||
| + | path = Path(filename) | ||
| + | |||
| + | # retourne True si le fichier existe | ||
| + | path.exists() | ||
| + | |||
| + | # retourner un tuple contenant entre autre propriétaire, | ||
| + | path.stat() | ||
| + | file_size = path.stat().st_size() | ||
| + | |||
| + | # Détruire un fichier: | ||
| + | path.unlink() | ||
| + | |||
| + | # rechercher des fichiers | ||
| + | dirpath = Path(' | ||
| + | |||
| + | for files in dirpath.glob(" | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ===== Formats ===== | ||
| + | |||
| + | Lors de l' | ||
| + | |||
| + | JSON s'est popularisé car il est léger, permet de communiquer avec des applications web en JavaScript et qu'il est supporté par de nombreux langage. Il permet de sérialiser facilement la plupart des types de base: | ||
| + | |||
| + | <code python> | ||
| + | dataset = [10,33, | ||
| + | ' | ||
| + | | ||
| + | | ||
| + | # les tuples seront convertis en listes | ||
| + | | ||
| + | ] | ||
| + | |||
| + | # Ecrire dans un fichier au format JSON | ||
| + | with open("/ | ||
| + | json.dump(dataset, | ||
| + | |||
| + | del(dataset) | ||
| + | |||
| + | # Relire, récupérer des données au format JSON | ||
| + | with open("/ | ||
| + | dataset = json.load(json_input) | ||
| + | |||
| + | dataset | ||
| + | [10, | ||
| + | 33, | ||
| + | ' | ||
| + | [2.5, 3.1], | ||
| + | | ||
| + | [2, 3, 4]] | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Les données une fois rechargées ne comportent plus le tuple initial, il a été remplacé par une liste équivalente. Certains types de base Python non natif en JavaScript ne sont pas supportés par JSON: tuple, complex, set, frozenset | ||
| + | </ | ||
| + | |||
| + | Le module **pickle** offre un format proche de JSON intégrant les types de base et permettant de faire des sauvegardes locales d' | ||
| + | |||
| + | ===== Entrées sorties standards ===== | ||
| + | |||
| + | Les fichiers d' | ||
| + | <code python> | ||
| + | import sys | ||
| + | for channel in (sys.stdin, sys.stdout, sys.stderr): | ||
| + | print(channel, | ||
| + | </ | ||
| + | |||
| + | Comme sys.stdout est une variable du module sys référençant un objet fichiere, on peut lui faire référencer un autre fichier et rediriger ainsi les sorties. | ||