web-dev-qa-db-fra.com

Écrire une chaîne dans un fichier sur une nouvelle ligne à chaque fois

Je veux ajouter une nouvelle ligne à ma chaîne chaque fois que j'appelle file.write(). Quelle est la façon la plus simple de faire cela en Python?

201
kaushik

Utilisez "\ n":

file.write("My String\n")

Voir le manuel Python pour référence.

230
halfdan

Vous pouvez le faire de deux manières:

f.write("text to write\n")

ou, selon votre version Python (2 ou 3):

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x
95
Greg Hewgill

Vous pouvez utiliser:

file.write(your_string + '\n')
62
Krishna K

Si vous l'utilisez beaucoup (beaucoup de lignes écrites), vous pouvez sous-classer 'fichier':

class cfile(file):
    #subclass file to have a more convienient use of writeline
    def __init__(self, name, mode = 'r'):
        self = file.__init__(self, name, mode)

    def wl(self, string):
        self.writelines(string + '\n')
        return None

Maintenant, il offre une fonction supplémentaire wl qui fait ce que vous voulez:

fid = cfile('filename.txt', 'w')
fid.wl('appends newline charachter')
fid.wl('is written on a new line')
fid.close()

Peut-être me manque quelque chose comme des caractères de nouvelle ligne différents (\ n,\r, ...) ou que la dernière ligne se termine également par une nouvelle ligne, mais cela fonctionne pour moi.

18
mathause
file_path = "/path/to/yourfile.txt"
with open(file_path, 'a') as file:
    file.write("This will be added to the next line\n")

ou

log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")
5
Panos Kal.

vous pourriez faire:

file.write(your_string + '\n')

comme suggéré par une autre réponse, mais pourquoi utiliser la concaténation de chaînes (lente, source d'erreurs) lorsque vous pouvez appeler deux fois file.write:

file.write(your_string)
file.write("\n")

notez que les écritures sont mises en mémoire tampon, cela revient donc à la même chose.

4

Juste une note, file n'est pas supporté dans Python 3 et a été supprimé. Vous pouvez faire la même chose avec la fonction intégrée open.

f = open('test.txt', 'w')
f.write('test\n')
1
user1767754

C'est la solution que j'ai trouvée en essayant de résoudre ce problème pour moi-même afin de produire systématiquement des\n en tant que séparateurs. Il écrit en utilisant une liste de chaînes où chaque chaîne représente une ligne du fichier, mais il semble que cela puisse également fonctionner pour vous. (Python 3. +)

#Takes a list of strings and prints it to a file.
def writeFile(file, strList):
    line = 0
    lines = []
    while line < len(strList):
        lines.append(cheekyNew(line) + strList[line])
        line += 1
    file = open(file, "w")
    file.writelines(lines)
    file.close()

#Returns "\n" if the int entered isn't zero, otherwise "".
def cheekyNew(line):
    if line != 0:
        return "\n"
    return ""
1
democidist

À moins d'écrire dans des fichiers binaires, utilisez print. L'exemple ci-dessous convient au formatage de fichiers csv:

def write_row(file_, *columns):
    print(*columns, sep='\t', end='\n', file=file_)

Usage:

PHI = 45
with open('file.csv', 'a+') as f:
    write_row(f, 'header', 'phi:', PHI, 'serie no. 2')
    write_row(f)  # newline
    write_row(f, data[0], data[1])

Remarques:

0
Mesco