Les Fichiers avec Python

De knowledge
Aller à la navigation Aller à la recherche

Utiliser des fichiers avec python suit la même philosophie que les autres langages mais une syntaxe particulière. (surtout les modes de création qui diffèrent de ce qui se fait sous perl et en C)

Modules utilisés

Il n'y en a pas par défaut. Python sait nativement gérer les fichiers disque.

Modèle mémoire

Comment est-ce que les fichiers sont gérés en mémoire par python?

Il existe deux types de mémoire dans un ordinateur, à savoir la mémoire RAM et la mémoire de masse. Chaque fichier que vous avez enregistré ou que toute personne a enregistré se trouve dans la mémoire de masse car toutes les données de la RAM sont perdues lorsque l'ordinateur est éteint.

Ainsi, lorsque vous devez modifier un fichier texte ou simplement travailler avec lui en python, vous devez charger ce fichier dans la mémoire RAM. Python interagit avec les fichiers chargés dans la mémoire RAM ou la mémoire de masse via des « gestionnaires de fichiers » (c'est ainsi que votre système d'exploitation donne accès à Python pour interagir avec le fichier que vous avez ouvert en recherchant le fichier dans sa mémoire s'il le trouve, il renvoie un gestionnaire de fichiers, puis vous pouvez travailler avec le fichier ).

Opérations de base

Ouverture

Pour ouvrir un fichier avec python c'est simple on doit fournir son nom et le mode dans lequel on va l'ouvrir:

  • Read Only "r" : dans ce mode on le pourra que lire le contenu du fichier. Le "handle" de fichier sera positionné au début.
  • Read Write "r+" : Le fichier est ouvert en lecture écriture. Le "handle" de fichier sera toujours positionné au début.
  • Write Only "w" : Ouvre un fichier en écriture. Si le fichier existe in est tronqué et son "handle" est toujours positionné au début d'un fichier vide. Si il n'existe pas il sera crée. (dans pas mal de langages cela corresponds à un "create" du "C")
  • Write & Read "w+" : Ouvre un fichier comme en mode "w" mais permet également la lecture. Le "Handle" est toujours au début d'un fichier vide.
  • Append only "a" : C'est la même chose que le "w" mais, si il existe, le fichier est préservé et le "handle" est positionné à la fin du fichier.
  • Append & Read "a+" : Comme le mode "a" mais avec la possibilité de lire.
File = open(r"directory/file.txt","w")

Pour info le "r" devant le nom du fichier dit à python de ne pas interpréter les "/" comme des caractères d'échappement mais comme des "/" normaux. Le "r" veut dire "raw" dans ce cas. Ou c'est sujet à confusion avec le "r" qui donne le mode read

Le "/" doit être utilisé sous Linus, MAC mais aussi Windows. Le "\" serait anbigu.

Fermeture

On firme un fichier avec.... close.

File.close()

Oui File est un objet.

Ecriture

On utilisera la fonction write. Cette fonction n'ajoute pas de saut de ligne à la fin.

File = open(r"directory/file.txt","w")
File.write("Hello World\n")
File.close()

Crée un fichier contenant une ligne. La fonction writelines peut être aussi utilisée. Son argument est une liste de lignes.

L = ["Hello Paris \n","Hello London \n","Hello New-York \n"]

File = open(r"directory/file.txt","w")
File.writelines(L)
File.close()

Va créer un fichier disque contenant :

Hello Paris 
Hello London 
Hello New-York

Si on veut ajouter une ligne à la fin:

File = open(r"directory/file.txt","a")
File.write("Hello Noumea\n")
File.close()

Ajoute "Hello Noumea" au fichier qui existe déja.

Lecture

On peut lire le fichier octet par octet

File = open(r"directory/file.txt","r")
b=File.read(1)
print (p)
b=File.read(1)
print (p)
File.close()

On ouvre le fichier crée au paragraphe précédent et on affiche les deux premières lettres : "H" et "e" puisque le fichier commence par "Hello..." On peut lire tout le fichier en vrac en ne précisant pas de taille:

File = open(r"directory/file.txt","r")
vrac=File.read()
print (vrac)
File.close()

Qui imprimera :

Hello Paris 
Hello London 
Hello New-York 
Hello Noumea
Attention.png
ATTENTION: Tout le fichier est mis en mémoire dans ce cas. Ca peut faire beaucoup même si Python gère le swap.

Il existe aussi un équivalent de writelines:

File = open(r"directory/file.txt","r")
lines=File.readlines()
print (lines)
File.close()

Dans ce cas lines contient une liste de lignes.

Ce sont des valeurs encadrées par des "[ ]" mais on appelle ça des liste pas des tableaux....

On obtient donc à l'écran la sortie standard d'un objet liste :

['Hello Paris \n', 'Hello London \n', 'Hello New-York \n', 'Hello Noumea\n']