Quelles sont les différences entre les modes d'accès aux fichiers en Python ?

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Les capacités de gestion de fichiers de Python sont essentielles pour un large éventail d'applications. Comprendre les différents modes d'accès aux fichiers est crucial pour gérer et manipuler efficacement les fichiers. Ce labo explorera les modes d'accès aux fichiers courants en Python, leurs différences et comment sélectionner le mode approprié pour votre cas d'utilisation spécifique.

Dans ce labo, vous découvrirez les modes d'accès aux fichiers fondamentaux en Python, explorerez leurs cas d'utilisation courants et comprendrez comment choisir le mode approprié pour vos opérations sur les fichiers.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/FileHandlingGroup -.-> python/file_opening_closing("Opening and Closing Files") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/catching_exceptions -.-> lab-397713{{"Quelles sont les différences entre les modes d'accès aux fichiers en Python ?"}} python/file_opening_closing -.-> lab-397713{{"Quelles sont les différences entre les modes d'accès aux fichiers en Python ?"}} python/file_reading_writing -.-> lab-397713{{"Quelles sont les différences entre les modes d'accès aux fichiers en Python ?"}} python/file_operations -.-> lab-397713{{"Quelles sont les différences entre les modes d'accès aux fichiers en Python ?"}} end

Comprendre et pratiquer le mode Lecture ('r')

En Python, les modes d'accès aux fichiers spécifient comment un fichier doit être ouvert et quelles opérations (comme la lecture ou l'écriture) sont autorisées. Comprendre ces modes est crucial pour une gestion efficace des fichiers. Lorsque vous utilisez la fonction intégrée open(), vous fournissez le chemin d'accès au fichier et, éventuellement, une chaîne de mode. Par exemple, open('my_file.txt', 'r') ouvre le fichier en mode lecture.

Voici un aperçu rapide des modes courants :

  • Mode Lecture ('r'): Ouvre pour la lecture (par défaut). Pointeur au début. Lève une exception FileNotFoundError si le fichier n'existe pas.
  • Mode Écriture ('w'): Ouvre pour l'écriture. Tronque (efface) le fichier s'il existe, le crée sinon. Pointeur au début.
  • Mode Ajout ('a'): Ouvre pour l'écriture. Pointeur à la fin si le fichier existe, le crée sinon. Les nouvelles données sont ajoutées à la fin.
  • Lecture et Écriture ('r+'): Ouvre un fichier existant pour la lecture et l'écriture. Pointeur au début.
  • Écriture et Lecture ('w+'): Ouvre pour l'écriture et la lecture. Tronque ou crée le fichier. Pointeur au début.
  • Ajout et Lecture ('a+'): Ouvre pour l'ajout et la lecture. Pointeur à la fin pour l'écriture. Crée le fichier s'il n'existe pas.

Entraînons-nous avec le mode le plus basique : la lecture ('r'). Ce mode est utilisé uniquement pour lire le contenu d'un fichier existant. Le pointeur de fichier commence au début. N'oubliez pas que tenter d'ouvrir un fichier inexistant en mode 'r' provoquera une erreur.

Tout d'abord, nous avons besoin d'un fichier à lire. À l'aide de l'éditeur VS Code dans LabEx, accédez au répertoire /home/labex/project dans l'explorateur de fichiers. Créez un nouveau fichier nommé my_reading_file.txt. Ajoutez les lignes suivantes et enregistrez le fichier :

This is the first line.
This is the second line.

Maintenant, créez un script Python dans le même répertoire nommé read_example.py. Ajoutez le code suivant, qui ouvre le fichier texte en mode lecture, lit son contenu et l'imprime. Nous incluons un bloc try...except pour gérer avec élégance le cas où le fichier pourrait ne pas être trouvé.

try:
    ## Open the file in read mode ('r')
    with open('/home/labex/project/my_reading_file.txt', 'r') as file:
        ## Read the entire content of the file
        content = file.read()
        print("File content:")
        print(content)
except FileNotFoundError:
    print("Error: The file my_reading_file.txt was not found.")
except Exception as e:
    print(f"An error occurred: {e}")

print("\\nFinished reading the file.")

Enregistrez ce script Python. Ensuite, ouvrez le terminal dans VS Code (Terminal > New Terminal). Assurez-vous que vous êtes dans le bon répertoire en exécutant pwd, qui devrait afficher /home/labex/project.

Exécutez le script à l'aide de l'interpréteur Python :

python read_example.py

Vous devriez voir le contenu de my_reading_file.txt imprimé dans le terminal, suivi du message de fin :

File content:
This is the first line.
This is the second line.

Finished reading the file.

Cela démontre l'ouverture et la lecture réussies d'un fichier en utilisant le mode 'r'.

Illustration of reading a file

Pratiquer avec le mode Écriture ('w')

Le mode écriture ('w') est utilisé lorsque vous souhaitez écrire dans un fichier. Soyez prudent : si le fichier existe déjà, l'ouvrir en mode 'w' le tronquera, ce qui signifie que tout son contenu précédent sera effacé. Si le fichier n'existe pas, le mode 'w' le créera pour vous. Ce mode est idéal pour créer de nouveaux fichiers ou repartir à zéro avec un fichier existant.

Essayons d'écrire dans un fichier. Dans votre répertoire /home/labex/project, créez un nouveau fichier Python nommé write_example.py. Ajoutez le code suivant. Ce script ouvrira (ou créera) my_writing_file.txt en mode écriture et y écrira deux lignes.

try:
    ## Open the file in write mode ('w')
    ## If the file exists, its content will be overwritten.
    ## If the file does not exist, it will be created.
    with open('/home/labex/project/my_writing_file.txt', 'w') as file:
        ## Write some content to the file
        file.write("This is the first line written in write mode.\n")
        file.write("This is the second line.\n")
    print("Content successfully written to my_writing_file.txt")

except Exception as e:
    print(f"An error occurred: {e}")

print("\nFinished writing to the file.")

Enregistrez le script write_example.py. Dans le terminal (toujours dans /home/labex/project), exécutez le script :

python write_example.py

Vous devriez voir un message de confirmation :

Content successfully written to my_writing_file.txt

Finished writing to the file.

Pour confirmer que le fichier a été créé et qu'il contient le texte correct, utilisez la commande cat dans le terminal :

cat /home/labex/project/my_writing_file.txt

La sortie devrait être exactement ce que le script a écrit :

This is the first line written in write mode.
This is the second line.

Cela montre comment créer ou écraser un fichier et y écrire du contenu en utilisant le mode 'w'.

Pratiquer avec le mode Ajout ('a')

Contrairement au mode écriture ('w'), le mode ajout ('a') est utilisé pour ajouter du contenu à la fin d'un fichier existant sans supprimer son contenu actuel. Si le fichier n'existe pas, le mode 'a' le créera. Le pointeur de fichier est automatiquement positionné à la fin du fichier lors de l'ouverture, de sorte que toutes les opérations write() ajouteront des données.

Ajoutons quelques lignes au fichier my_writing_file.txt que nous avons créé à l'étape précédente. Créez un nouveau script Python nommé append_example.py dans /home/labex/project avec le code suivant :

try:
    ## Open the file in append mode ('a')
    ## If the file exists, new content will be added to the end.
    ## If the file does not exist, it will be created.
    with open('/home/labex/project/my_writing_file.txt', 'a') as file:
        ## Append some content to the file
        file.write("This line is appended.\n")
        file.write("Another line is appended.\n")
    print("Content successfully appended to my_writing_file.txt")

except Exception as e:
    print(f"An error occurred: {e}")

print("\nFinished appending to the file.")

Enregistrez ce script. Maintenant, exécutez-le depuis le terminal :

python append_example.py

Le script confirmera l'opération d'ajout :

Content successfully appended to my_writing_file.txt

Finished appending to the file.

Pour voir le résultat, utilisez à nouveau cat pour afficher l'intégralité du fichier :

cat /home/labex/project/my_writing_file.txt

Vous devriez voir les deux lignes originales suivies des deux nouvelles lignes ajoutées :

This is the first line written in write mode.
This is the second line.
This line is appended.
Another line is appended.

Le mode ajout est très utile pour des tâches telles que l'ajout d'entrées de journal (log entries) ou l'ajout de nouveaux enregistrements à un fichier de données sans perdre les données précédentes.

Pratiquer avec les modes Lecture/Écriture et Choisir le Bon Mode

Python propose également des modes qui permettent à la fois la lecture et l'écriture dans le même contexte open(). Ceux-ci offrent plus de flexibilité, mais nécessitent une manipulation prudente du pointeur de fichier.

  • Lecture et Écriture ('r+'): Ouvre un fichier existant pour la lecture et l'écriture. Le pointeur commence au début. L'écriture écrasera le contenu existant à partir de la position du pointeur.
  • Écriture et Lecture ('w+'): Ouvre un fichier pour l'écriture et la lecture. Il tronque le fichier s'il existe ou le crée s'il n'existe pas. Le pointeur commence au début.
  • Ajout et Lecture ('a+'): Ouvre un fichier pour l'ajout (écriture à la fin) et la lecture. Il crée le fichier s'il n'existe pas. Le pointeur commence à la fin pour l'écriture, mais vous pouvez le déplacer (par exemple, en utilisant file.seek(0)) pour lire depuis le début.

Illustrons 'r+'. Nous utiliserons le fichier my_reading_file.txt créé à l'étape 1. Nous allons l'ouvrir, lire le contenu, puis déplacer le pointeur au début et écraser le début du fichier.

Créez un fichier Python nommé rplus_example.py dans /home/labex/project. Ajoutez ce code :

try:
    ## Open the file in read and write mode ('r+')
    ## The file must exist for this mode.
    with open('/home/labex/project/my_reading_file.txt', 'r+') as file:
        ## Read the initial content
        initial_content = file.read()
        print("Initial file content:")
        print(initial_content)

        ## Move the file pointer back to the beginning
        print("\nMoving pointer to the beginning using file.seek(0).")
        file.seek(0)

        ## Write new content at the beginning (overwriting existing content)
        print("Writing new content...")
        file.write("Prepended line 1.\n")
        file.write("Prepended line 2.\n")

        ## If the new content is shorter than what was overwritten,
        ## the rest of the original content might remain unless truncated.
        ## We can use file.truncate() after writing to remove any trailing old data.
        print("Truncating file to the current position to remove old trailing data.")
        file.truncate()

        print("\nContent written and file truncated.")

except FileNotFoundError:
    print("Error: The file was not found. 'r+' requires the file to exist.")
except Exception as e:
    print(f"An error occurred: {e}")

print("\nFinished with r+ mode example.")

Ce script ouvre le fichier en mode 'r+', lit, revient au début (file.seek(0)), écrit de nouvelles lignes (en écrasant), puis utilise file.truncate() pour supprimer tout contenu original restant qui pourrait exister au-delà du texte nouvellement écrit.

Enregistrez rplus_example.py. Avant de l'exécuter, assurons-nous que my_reading_file.txt a son contenu original :

echo "This is the first line." > /home/labex/project/my_reading_file.txt
echo "This is the second line." >> /home/labex/project/my_reading_file.txt

Maintenant, exécutez le script Python depuis le terminal :

python rplus_example.py

Vous verrez le contenu initial imprimé, suivi de messages concernant le processus :

Initial file content:
This is the first line.
This is the second line.


Moving pointer to the beginning using file.seek(0).
Writing new content...
Truncating file to the current position to remove old trailing data.

Content written and file truncated.

Finished with r+ mode example.

Vérifiez le contenu final du fichier en utilisant cat :

cat /home/labex/project/my_reading_file.txt

La sortie ne devrait afficher que le contenu nouvellement écrit, grâce à l'écrasement et à la troncature :

Prepended line 1.
Prepended line 2.

Choisir le Mode d'Accès au Fichier Approprié

Sélectionner le mode correct est vital. Voici un guide rapide :

  • Utilisez 'r' pour un accès en lecture seule aux fichiers existants.
  • Utilisez 'w' pour créer un nouveau fichier ou remplacer complètement le contenu d'un fichier existant.
  • Utilisez 'a' pour ajouter à la fin d'un fichier sans perdre les données existantes (bon pour les journaux/logs).
  • Utilisez 'r+' pour lire et modifier un fichier existant depuis le début.
  • Utilisez 'w+' pour créer ou écraser un fichier, puis le lire/écrire.
  • Utilisez 'a+' pour ajouter à un fichier et également pouvoir le lire (nécessite l'utilisation de seek()).

Ce tableau résume les comportements clés :

Mode Lecture (Read) Écriture (Write) Créer si n'existe pas (Create if not exists) Tronquer si existe (Truncate if exists) Position du pointeur (initiale) (Pointer Position (Initial))
'r' Oui Non Non Non Début (Beginning)
'w' Non Oui Oui Oui Début (Beginning)
'a' Non Oui Oui Non Fin (End)
'r+' Oui Oui Non Non Début (Beginning)
'w+' Oui Oui Oui Oui Début (Beginning)
'a+' Oui Oui Oui Non Fin (End)

En considérant si vous devez lire, écrire, ajouter, gérer des fichiers existants ou en créer de nouveaux, vous pouvez choisir en toute confiance le mode le plus approprié à votre tâche.

Résumé

Dans ce labo, vous avez découvert les différents modes d'accès aux fichiers en Python et leurs principales différences. Vous avez exploré les modes 'r', 'w' et 'a' pour les opérations de lecture, d'écriture et d'ajout de base, respectivement. Vous avez également brièvement abordé les modes de lecture et d'écriture ('r+', 'w+', 'a+') qui offrent plus de flexibilité.

En vous exerçant avec ces modes et en comprenant leur comportement concernant la création de fichiers, la troncature et la position du pointeur, vous êtes maintenant équipé pour choisir le mode approprié pour vos tâches de gestion de fichiers en Python. Cette connaissance est fondamentale pour gérer et manipuler efficacement les fichiers dans vos applications.