Comment effectuer des opérations d'entrée / sortie Python sur des fichiers avec une fonction ouverte Python

Comment effectuer des opérations d'entrée / sortie Python sur des fichiers avec une fonction ouverte Python

La manipulation des fichiers est une opération qui, tôt ou tard, nous aurons besoin de jouer dans nos programmes. Le python intégré ouvrir La fonction renvoie un objet de fichier, qui nous permet d'interagir avec des fichiers dans différents modes: nous les verrons dans cet article.

Dans ce tutoriel Python, vous apprendrez:

  • Comment utiliser la fonction ouverte Python.
  • Quels sont les différents modes de fonctionnement qui peuvent être utilisés avec la fonction ouverte Python.
  • Comment interagir avec un objet de fichier.
  • Pourquoi est important de fermer un objet de fichier et comment le faire.

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant du SO
Logiciel python3
Autre Aucune autorisation spéciale requise.
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier
>>> - Commandes Python à exécuter dans un shell interactif

Instructions d'entrée et de sortie Python

Il existe de nombreuses raisons pour lesquelles un programme pourrait avoir besoin d'interagir avec les fichiers: la lecture des configurations et des paramètres qui influenceront le comportement du programme lui-même, ou peut-être les données persistantes. Dans ce tutoriel, nous verrons comment accomplir de telles tâches, en utilisant la fonction ouverte Python et en interagissant avec Fichier des objets.



La fonction ouverte Python

Avant de commencer à lire ou à écrire des fichiers, nous devons apprendre comment nous pouvons y accéder. La fonction Open Python ouvre un fichier et renvoie un objet de fichier, élever un Oserror exception si la ressource ne peut pas être accessible. La fonction n'a qu'un seul argument obligatoire, déposer, qui est la chaîne ou l'octet-objet représentant le chemin du fichier à ouvrir:

>>> FOBject = Open ('LinuxConfig.SMS') 
Copie

Mode de lecture - 'R'

Nous avons ouvert le linuxconfig.SMS le fichier, et l'objet de fichiers résultant est maintenant référencé par fobject. C'est un python objet de fichier qui implémente des méthodes comme écrire et lire. Et si le linuxconfig.SMS Le fichier n'existait pas? UN Filenotfounderror Une exception serait soulevée:

>>> FOBject = Open ('LinuxConfig.txt ') traceback (dernier appel dernier): fichier "", ligne 1, dans  FilenotFoundError: [errno 2] pas de tel fichier ou répertoire: 'LinuxConfig.SMS' 
Copie

Comme nous venons de le dire ci-dessus, le seul argument obligatoire de la fonction ouverte Python est déposer. Lorsqu'il est utilisé comme dans l'exemple ci-dessus, la fonction fonctionne dans mode texte et un fichier est ouvert uniquement pour la lecture. L'équivalent verbeux de ce que nous avons fait ci-dessus est:

>>> FOBject = Open ('LinuxConfig.txt ',' rt ') 
Copie

Le deuxième argument de la fonction est le mode. Dans ce cas, 'rt', où le 'R' représente lire et le 'T' Spécifie que nous opérons en mode texte. Il est également possible d'ouvrir des fichiers en mode binaire, en remplacement 'T' avec 'B': Dans ce cas, le contenu des octets, sans aucun encodage sera retourné. Depuis 'T' est le mode par défaut, à partir de maintenant, nous l'omettre. Pour lire le contenu du fichier que nous pouvons utiliser, par exemple, le lire méthode. Il renverra tout le contenu de fichier en tant que chaîne:

>>> Fobject.lire () 'LinuxConfig est génial!\ n ' 
Copie

Quand fonctionne en mode de lecture, toute tentative d'écriture dans le fichier augmentera un Io.Sans position exception:

>>> Fobject.écrire ('LinuxConfig est génial!') Traceback (dernier appel dernier): fichier "", ligne 1, dans  Io.Non soutenu 
Copie

De toute évidence, ce n'est pas le seul mode disponible. Voyons les autres.

Mode d'écriture - 'W'

Lors de la spécification 'W' comme la valeur du mode argument du ouvrir fonction, si le fichier existe, c'est le premier tronqué (son contenu entier est jeté) puis il est ouvert à l'écriture; Si le fichier n'existe pas, il est créé. Dans ce cas, nous utilisons le écrire Méthode de l'objet de fichier:

>>> FOBject = Open ('LinuxConfig.txt ',' w ') >>> fobject.Écrire ('Nous venons d'écrire au fichier!') 26 >>> Fobject.fermer() 
Copie

Nous avons ouvert le fichier pour l'écriture que nous avons utilisé le écrire Méthode de l'objet de fichier, qui écrit la chaîne et renvoie le nombre de caractères écrits, 26 Dans ce cas, nous avons finalement utilisé le fermer Méthode pour fermer l'objet: cette étape est vraiment importante, car l'opération d'écriture ne devient efficace qu'une fois que le contenu du fichier est rincé (nous verrons l'importance de fermer un objet de fichier à la fin du tutoriel). Si nous examinons maintenant le contenu du fichier, nous voyons que son contenu précédent a été écrasé et qu'il ne contient que la chaîne:

'Nous venons d'écrire au fichier!'

Comme cela s'est produit ci-dessus, si nous essayons d'effectuer une opération non autorisée par le mode de fonctionnement, une exception est soulevée. Dans ce cas, si nous essayons de lire le contenu du fichier, nous obtenons le résultat suivant:

>>> FOBject = Open ('LinuxConfig.txt ',' w ') >>> fobject.read () traceback (dernier appel dernier): fichier "", ligne 1, dans IO.Non étayé: non lisible 
Copie

Ajout d'un fichier: mode 'A'

Et si nous voulons ajouter un fichier, en gardant son contenu actuel? Nous devons utiliser le 'un' (Ajouter) Mode. Lorsque ce mode est utilisé, si un fichier existe, il est ouvert à l'écriture et que le flux est positionné à la fin de celui-ci. De cette façon, le contenu précédent du fichier sera conservé. Si le fichier n'existe pas, il est créé:

>>> FOBject = Open ('LinuxConfig.txt ',' a ') >>> fobject.Écrire ('Texte annexe!') 14 >>> Fobject.fermer() 
Copie

Nous avons ouvert le fichier dans 'un' mode et écrire la chaîne «Texte annexe» dans le fichier. Le contenu précédent n'a pas été tronqué:

LinuxConfig est génial! Texto annexé! 

Le mode «X» - Création exclusive

Ce mode d'ouverture est disponible uniquement dans Python3. Lorsqu'il est utilisé, un FileExisterSerror il est soulevé si le fichier existe déjà. Si le fichier n'existe pas, il est créé et ouvert à l'écriture:

fileObject = Open ('LinuxConfig.txt ',' x ') traceback (dernier appel dernier): fichier "", ligne 1, dans  FileExistSerror: [Errno 17] Le fichier existe: 'LinuxConfig.SMS' 
Copie

Chaque fois que nous écrivons quelque chose, il est annexé au contenu précédent, jusqu'à ce que nous fermons l'objet de fichier:

>>> fileObject = open ('LinuxConfig1.txt ',' x ') >>> fileObject.écriture ('LinuxConfig est à nouveau génial \ n') >>> fileObject.Écrivez ('je répète: LinuxConfig est génial!\ n ') >>> fileObject.fermer() 
Copie

Après avoir exécuté le code ci-dessus, le nouveau contenu du fichier sera:

LinuxConfig est génial! Je répète: LinuxConfig est génial! 

Le caractère '+'

Nous avons vu les modes de base qui peuvent être utilisés avec le ouvrir fonction et comment ils fonctionnent. En ajoutant le '+' caractère à chacun d'eux, nous pouvons obtenir de nouveaux comportements.

Le mode 'r +'

Lorsque vous ajoutez le caractère '+' en mode 'r' ('r +'), un fichier est ouvert à la fois pour la lecture et l'écriture; Une exception est soulevée si le fichier n'existe pas. Le flux est positionné au début du fichier, donc si quelque chose est écrit, il remplacera le contenu précédent. Si nous sommes dans ce mode, mais que nous voulons toujours que le nouveau contenu soit annexé, réservant l'existence, nous devons modifier la position actuelle en utilisant le chercher Méthode de l'objet de fichier avant d'écrire, de la manière suivante:

>>> fileObject = open ('LinuxConfig.txt ',' r + '): >>> fileObject.chercher (0,2) >>> fileObject.écrire ('ce texte sera annexé') >>> fileObject.fermer() 
Copie

Le chercher La méthode prend deux arguments: le premier est le compenser, La seconde est la position à partir de laquelle le décalage doit être calculé, où 0 (La valeur par défaut si cet argument est omis) est le début du fichier, 1 est le décalage actuel, et 2 est la fin du fichier. Dans ce cas, nous avons utilisé un décalage de 0 à partir de la fin du fichier, passant ainsi à la fin du fichier lui-même. Notez que la spécification d'un décalage non nul dans ce cas aurait soulevé un Io.Sans position exception, car il est impossible de faire une recherche non nulle et non liée.

Le mode 'W +'

Ce mode fonctionne de cette façon: le fichier sera ouvert à la fois pour la lecture et l'écriture. Si le fichier existe, son contenu sera tronqué, sinon le fichier sera créé. Tout comme l'exemple précédent, il sera possible de lire et d'écrire le fichier, mais il y a deux grandes différences: la première est que le contenu du fichier sera tronqué dès qu'il sera ouvert (et non si vous écrivez actif quelque chose pour il), le second est que le fichier sera créé s'il n'existe pas.



Le mode 'A +'

Lorsque vous spécifiez ce mode avec la fonction ouverte Python, nous obtenons le comportement suivant: tout comme dans les exemples précédents, le fichier est ouvert à la fois pour la lecture et pour l'écriture, cependant, le flux est positionné à la fin du fichier, donc tout nouveau contenu qu'il est ajouté à l'existence.

Deux choses doivent être notées: puisque le flux est positionné à la fin du fichier, si nous essayons d'utiliser le lire Méthode sur l'objet de fichier Pour obtenir le contenu actuel, il renverra une chaîne vide. Pour pouvoir lire le contenu, nous devons d'abord passer au début du fichier, en utilisant la méthode de recherche de la manière suivante:

fileobject.chercher (0)
Copie

La deuxième chose très importante à remarquer, c'est que lors de l'utilisation de ce mode, même si nous passons au début du fichier comme nous l'avons fait dans l'exemple ci-dessus, et effectuons une écriture, le contenu existant qu'il n'est pas perdu: le nouveau contenu C'est toujours annexé.

Clôture de l'objet de fichier

Après avoir fini de travailler avec notre objet de fichier, nous devons toujours nous rappeler de le fermer, pour plusieurs raisons. Dans Primis parce que certaines opérations, comme l'écriture, ne deviennent efficaces que lorsque l'objet de fichier est fermé et que son contenu est rincé, secondairement aux ressources système gratuites et à la clarté du code. Il y a deux façons de fermer un objet de fichier: le premier est en appelant le fermer Méthode sur l'objet de fichier, comme nous l'avons vu ci-dessus. Le second, c'est en utilisant le avec déclaration:

avec ouvert ('LinuxConfig.txt ',' r ') as fileObject: content = fileObject.lire () # effectuer les opérations nécessaires 
Copie

que se passe-t-il dans ce cas? En utilisant cette déclaration, l'expression à côté de avec, dans ce cas Open ('LinuxConfig.txt ',' r '), est évalué dans un objet de fichier, qui prend en charge le protocole de gestion de contexte, car il implémente le __entrer__ et __sortie__ méthodes. L'objet de fichier est ensuite aliasé à fileobject. Une fois le code contenu dans le bloc __sortie__ La méthode de l'objet de fichier est automatiquement appelée et l'objet de fichier est fermé. L'utilisation d'un gestionnaire de contexte est vraiment utile, car l'objet sera toujours fermé dès que nous finirons de l'opérer: une chose de moins à retenir.

Conclusions

Dans ce tutoriel, nous avons appris à utiliser le python intégré ouvrir fonction pour créer un objet de fichier, utilisé pour interagir avec un fichier. Nous avons vu les différents modes qui peuvent être transmis à la fonction et comment ils modifient le comportement de l'objet de fichier. Enfin, nous avons vu pourquoi il est important de toujours fermer un objet de fichier après avoir fini de travailler avec lui, comment nous pouvons le faire en utilisant le fermer méthode, et comment cela peut être fait automatiquement, si nous utilisons le avec déclaration et un gestionnaire de contexte. Comme toujours suggéré, vous pouvez consulter la documentation officielle pour améliorer encore vos connaissances.

Voir également notre tutoriel Python plus étendu pour plus de concepts liés à Python ou nos fichiers de lecture et d'écriture avec un guide Python.

Tutoriels Linux connexes:

  • Gestion de la saisie des utilisateurs dans les scripts bash
  • Masterring Bash Script Loops
  • Fichiers de configuration Linux: 30 premiers
  • Manipulation de Big Data pour le plaisir et le profit Partie 1
  • Manipulation des mégadonnées pour le plaisir et le profit Partie 3
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à installer sur Ubuntu 20.04
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Manipulation de Big Data pour le plaisir et le profit Partie 2
  • Comment monter l'image ISO sur Linux