web-dev-qa-db-fra.com

Ajouter une nouvelle ligne à la chaîne, multiplateforme

Je génère du texte dans ma candidature. Étant donné que le texte fait partie d'un message plus important, parfois je dois ajouter des nouvelles lignes, parfois pas:

NEWLINE = '\n'  # TODO: how to define this cross-platform? Can I use os.linesep?

def get_txt(add_newline=False):
    txt = 'Hello'
    if add_newline:
        txt += NEWLINE
    return txt

Cela pourrait être utilisé comme suit:

def get_message():
    msg = get_txt(True)
    msg += get_txt(True)
    msg += get_txt(False)
    return msg

Qui reviendrait:

Hello
Hello
Hello (no newline here)

Comment puis-je définir NEWLINE de manière multiplateforme? Ou mieux encore, y a-t-il une fonction dans la bibliothèque standard (ou incluse dans python) qui peut ajouter une nouvelle ligne à une chaîne? (pas nécessairement lors de l'impression, ajoutez simplement une nouvelle ligne à la chaîne en mémoire). La nouvelle ligne utilisée devrait être la bonne pour la plate-forme étaient python est en cours d'exécution

12
dangonfast

Je viens toujours d'utiliser le caractère de nouvelle ligne '\n' pour signifier un saut de ligne, bien que Windows utilise une nouvelle ligne et un caractère de retour chariot, j'ai testé sur ma machine Windows (python 3.4) la construction d'une chaîne en mémoire puis l'écriture dans un fichier, tandis qu'en mémoire, elle reste comme un seul caractère ( '\n') cependant, quand il est écrit dans un fichier, il est converti en deux caractères pour que la ligne correcte se termine sur Windows.
jusqu'à présent, je n'ai pas encore rencontré une seule bibliothèque qui avait un problème avec cela.

7
James Kent

Vous pouvez essayer avec ceci:

import os
print(os.linesep)
16
decadenza

Vous devez imprimer votre message pour qu'il s'affiche en tant que nouvelle ligne.

get_txt()
msg = get_message()
print(msg)

te donnera:

Hello
Hello
Hello

Assurez-vous simplement d'imprimer dans un fichier.

0
Aryn Choong