410 votes

Comment puis-je spécifier de nouvelles lignes dans une chaîne afin d'écrire plusieurs lignes dans un fichier?

Comment puis-je indiquer un saut de ligne dans une chaîne en Python, de sorte que je puisse écrire plusieurs lignes dans un fichier texte?

14voto

aalaap Points 928

La solution la plus simple

Si vous appelez simplement print sans aucun argument, cela affichera une ligne vide.

print

Vous pouvez rediriger la sortie vers un fichier comme ceci (en considérant votre exemple) :

f = open('out.txt', 'w')
print 'Première ligne' >> f
print >> f
print 'Deuxième ligne' >> f
f.close()

Non seulement c'est agnostique au système d'exploitation (sans même avoir à utiliser le package os), mais c'est également plus lisible que d'insérer \n dans les chaînes de caractères.

Explication

La fonction print() a un argument facultatif pour la fin de la chaîne, appelé end, qui a pour valeur par défaut le caractère de nouvelle ligne du système d'exploitation, par exemple \n. Ainsi, lorsque vous appelez print('hello'), Python imprime en réalité 'hello' + '\n'. Cela signifie que lorsque vous appelez simplement print sans aucun argument, cela imprime en réalité '' + '\n', ce qui donne une nouvelle ligne.

Alternative

Utilisez des chaînes multi-lignes.

s = """Première ligne
    Deuxième ligne
    Troisième ligne"""
f = open('out.txt', 'w')
print s >> f
f.close()

11voto

mhawke Points 10385

En Python, vous pouvez simplement utiliser le caractère de nouvelle ligne, c'est-à-dire \n

10voto

Rea Haas Points 71

Comme mentionné dans d'autres réponses : "Le caractère de nouvelle ligne est \n. Il est utilisé à l'intérieur d'une chaîne".

J'ai trouvé que la façon la plus simple et la plus lisible est d'utiliser la fonction "format", en utilisant nl comme nom pour une nouvelle ligne, et de formater la chaîne que vous souhaitez imprimer exactement comme vous allez l'imprimer :

Python 2 :

print("ligne1{nl}"
      "ligne2{nl}"
      "ligne3".format(nl="\n"))

Python 3 :

nl = "\n"
print(f"ligne1{nl}"
      f"ligne2{nl}"
      f"ligne3")

Cela affichera :

ligne1
ligne2
ligne3

De cette façon, cela effectue la tâche, tout en donnant une grande lisibilité du code :)

9voto

Levon Points 34085

De la même manière avec '\n', bien que vous n'ayez probablement pas besoin du '\r'. Y a-t-il une raison pour laquelle vous l'avez dans votre version Java? Si vous en avez besoin/envie, vous pouvez l'utiliser de la même manière en Python aussi.

7voto

Trutane Points 81

Il est bon de noter qu'en inspectant une chaîne à l'aide de la console Python interactive ou d'un Notebook Jupyter, les caractères d'échappement tels que \n et d'autres chaînes avec des barrages comme \t sont affichés littéralement:

>>> gotcha = 'Voici un message aléatoire...'
>>> gotcha += '\nContenu supplémentaire:\n\t{}'.format('Et encore plus de bonnes choses!')
>>> gotcha
'Voici un message aléatoire...\nContenu supplémentaire:\n\tEt encore plus de bonnes choses!'

Les sauts de lignes, les tabulations et les autres caractères spéciaux non imprimés sont affichés comme des espaces seulement lorsqu'ils sont imprimés ou écrits dans un fichier:

>>> print('{}'.format(gotcha))
Voici un message aléatoire...
Contenu supplémentaire:
    Et encore plus de bonnes choses!

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