1327 votes

Façon correcte d'écrire la ligne de fichier en Python

Je suis habitué à faire print >>f, "hi there"

Cependant, il semble qu' print >> devient obsolète. Quelle est la méthode recommandée pour la ligne ci-dessus?

Mise à jour: Concernant toutes ces réponses avec "\n"...est-ce universel ou Unix-spécifique? C'est à dire, je dois faire "\r\n" sous Windows?

1505voto

Johnsyweb Points 45395

Cela devrait être aussi simple que:

>>> with open('somefile.txt', 'a') as the_file:
...     the_file.write('Hello\n')

À Partir De La Documentation:

Ne pas utiliser os.linesep comme un terminateur de ligne lors de l'écriture des fichiers ouverts en mode texte (par défaut); utiliser un seul "\n " à la place, sur toutes les plateformes.

Certains utile de lecture:

1008voto

sorin Points 23747

Vous devez utiliser le nouveau print (), déclaration, disponible avec la version 2.6 de Python+

from __future__ import print_function
print("hi there", file=f)

L'alternative serait d'utiliser:

f = open('myfile','w')
f.write('hi there\n') # python will convert \n to os.linesep
f.close() # you can omit in most cases as the destructor will call if

Citant le Python de la documentation concernant les retours à la ligne: Sur la sortie, si le saut de ligne n'est, tout '\n' caractères écrits sont traduits par défaut du système de séparateur de ligne, le système d'exploitation.linesep. Si le saut de ligne est - '', pas de traduction. Si le retour à la ligne est un de l'autre, les valeurs, toutes les '\n' caractères écrits sont traduits à la chaîne.

131voto

j7nn7k Points 5019

Le python docs recommandons cette manière:

with open('file_to_write', 'w') as f:
    f.write('file contents')

Donc, c'est la façon dont je le fais :)

Déclaration de docs.python.org:

Il est de bonne pratique d'utiliser le "par" mot-clé lorsque vous traitez avec des fichier objets. Ceci a l'avantage que le fichier est correctement fermé après sa gamme de finitions, même si une exception est levée sur le chemin. Il est aussi beaucoup plus courte que d'écrire l'équivalent essayez-enfin blocs.

92voto

John Machin Points 39706

Concernant les os.linesep:

Voici une exacte inédite Python 2.7.1 interprète session sur Windows:

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.linesep
'\r\n'
>>> f = open('myfile','w')
>>> f.write('hi there\n')
>>> f.write('hi there' + os.linesep) # same result as previous line ?????????
>>> f.close()
>>> open('myfile', 'rb').read()
'hi there\r\nhi there\r\r\n'
>>>

Sur Windows:

Comme prévu, le système d'exploitation.linesep ne PAS produire le même résultat qu' '\n'. Il n'y a aucun moyen qu'il pourrait produire le même résultat. 'hi there' + os.linesep est équivalent à 'hi there\r\n', ce qui n'est PAS équivalent à 'hi there\n'.

C'est simple: utilisez \n qui sera traduit automatiquement à l'os.linesep. Et c'est simple depuis le premier port de Python pour Windows.

Il n'y a pas de point à l'aide de mac os.linesep sur les systèmes non-Windows, et il donne de mauvais résultats sur Windows.

NE PAS UTILISER de système d'exploitation.linesep!

62voto

Hyperboreus Points 15985

Je ne pense pas qu'il y est une "bonne" façon.

Je voudrais utiliser:

with open ('myfile', 'a') as f: f.write ('hi there\n')

In memoriam Tim Toady.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X