Ouvrez les fichiers en modes 'rt' et 'wt'

108

Plusieurs fois ici sur SO, j'ai vu des gens utiliser les modes rtet wtpour lire et écrire des fichiers.

Par exemple:

with open('input.txt', 'rt') as input_file:
     with open('output.txt', 'wt') as output_file: 
         ...

Je ne vois pas les modes documentés , mais depuis open()ne lance pas d'erreur - il semble que son utilisation soit à peu près légale.

À quoi sert-il et y a-t-il une différence entre l'utilisation de wtvs wet de rtvs r?

alecxe
la source

Réponses:

193

tfait référence au mode texte. Il n'y a aucune différence entre ret rtou wet wtpuisque le mode texte est la valeur par défaut.

Documenté ici :

Character   Meaning
'r'     open for reading (default)
'w'     open for writing, truncating the file first
'x'     open for exclusive creation, failing if the file already exists
'a'     open for writing, appending to the end of the file if it exists
'b'     binary mode
't'     text mode (default)
'+'     open a disk file for updating (reading and writing)
'U'     universal newlines mode (deprecated)

Le mode par défaut est 'r'(ouvert pour la lecture de texte, synonyme de 'rt').

devnull
la source
4
Gotcha, il est documenté dans la documentation python3. Donc, il n'y a fondamentalement aucune différence entre wtvs wet rtvs r- juste explicit is better than implicit?
alecxe
@alecxe Exactement, puisque le mode texte est le mode par défaut, il n'y a pas de différence entre ret rt...
devnull
9
Notez que ce wn'est pas toujours égal à wt. Un tel cas est celui gzip.openoù le mode binaire est le mode par défaut, et non le mode texte. Question connexe: stackoverflow.com/questions/42013083/…
Carl Ekerot
9

Le tindique le mode texte, ce qui signifie que les \ncaractères seront traduits aux fins de ligne du système d'exploitation hôte lors de l'écriture dans un fichier, et inversement lors de la lecture. Le drapeau est essentiellement du bruit, puisque le mode texte est la valeur par défaut.

À part U, ces indicateurs de mode proviennent directement de la fopen()fonction de la bibliothèque C standard , un fait documenté dans le sixième paragraphe de la documentation python2 pour open().

Autant que je sache, tne fait pas et n'a jamais fait partie du standard C, donc bien que de nombreuses implémentations de la bibliothèque C l'acceptent de toute façon, il n'y a aucune garantie qu'elles le feront toutes, et donc aucune garantie que cela fonctionnera sur chaque build de python. Cela explique pourquoi les documents python2 ne le listaient pas, et pourquoi cela fonctionnait généralement de toute façon. Les documents python3 le rendent officiel.

ʇsәɹoɈ
la source
4

Le «r» est pour la lecture, «w» pour l'écriture et «a» pour l'ajout.

Le «t» représente le mode texte associé au mode binaire.

Plusieurs fois ici sur SO, j'ai vu des gens utiliser les modes rt et wt pour lire et écrire des fichiers.

Edit: Etes-vous sûr d'avoir vu rt et non rb?

Ces fonctions enveloppent généralement la fonction fopen qui est décrite ici:

http://www.cplusplus.com/reference/cstdio/fopen/

Comme vous pouvez le voir, il mentionne l'utilisation de b pour ouvrir le fichier en mode binaire.

Le lien de document que vous avez fourni fait également référence à ce mode b:

L'ajout de «b» est utile même sur les systèmes qui ne traitent pas les fichiers binaires et texte différemment, où il sert de documentation.

jussij
la source
Oui, c'était clairement rt, par exemple stackoverflow.com/questions/10971033/… , ou stackoverflow.com/questions/17127853/ ... etc. Merci pour l'info, bon à savoir.
alecxe
Dans le lien fourni par devnull, l'option de texte «t» est répertoriée. Ce qui m'a surpris, c'est que le lien C ++ ne mentionnait pas également cette option 't' car je suis presque sûr que j'avais utilisé les options 'rt' et 'wt' dans le code C fopen écrit il y a des années.
jussij
Ouais, c'est pourquoi j'ai demandé - c'était comme une fonctionnalité non documentée pour moi. J'espère que le fil aiderait quelqu'un à l'avenir. Merci encore.
alecxe
3

t indique pour text mode

https://docs.python.org/release/3.1.5/library/functions.html#open

sous Linux, il n'y a aucune différence entre le mode texte et le mode binaire, cependant, dans Windows, ils se convertissent \nen \r\nmode texte.

http://www.cygwin.com/cygwin-ug-net/using-textbinary.html

ymonad
la source
5
Dans Python 3, il existe une différence supplémentaire entre les modes texte et fichier binaire (sur toutes les plates-formes). En mode texte, readrenvoie les chaînes Unicode. En mode binaire, readrenvoie une bytesinstance. Si vous souhaitez écrire du code Python 2 avec la compatibilité ascendante à l'esprit, vous pouvez utiliser io.openplutôt que le standard openpour obtenir le comportement Python 3 (avec des instances unicodeversus str).
Blckknght