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

259

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 le faire en Python?

kaushik
la source

Réponses:

294

Utilisez "\ n":

file.write("My String\n")

Voir le manuel Python pour référence.

halfdan
la source
3
Si vous utilisez des variables pour composer l'enregistrement, vous pouvez ajouter + "\ n" à la fin, comme fileLog.write (var1 + var2 + "\ n").
Filipe
4
Dans les nouvelles versions de Python (3.6+), vous pouvez également utiliser des chaînes f:file.write(f"{var1}\n")
halfdan
109

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
Greg Hewgill
la source
j'utilise f.writelines (str (x)) pour écrire dans un fichier où x est la liste pour dire maintenant comment écrire une liste x dans un fichier en copiant chaque liste à partir de la nouvelle ligne
kaushik
2
@kaushik: f.write ('\ n'.join (x)) ou f.writelines (i +' \ n 'pour i in x)
Steven
Je pense que la méthode f.write est meilleure car elle peut être utilisée à la fois en Python 2 et 3.
Dang Manh Truong
78

Vous pouvez utiliser:

file.write(your_string + '\n')
Krishna K
la source
3
vous pouvez utiliser l'utilisation, par exemple, lorsque vous écrivez un int dans un fichier, vous pouvez utiliser file.write (str (a) + '\ n')
未来 陆家嘴 顶尖 的 投资 人
@xikhari Pourquoi? file.write(f"my number is: {number}\n")est très bien et lisible.
Guimoute
25

Si vous l'utilisez intensivement (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')

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 qu'il me manque quelque chose comme différents caractères de nouvelle ligne (\ n, \ r, ...) ou que la dernière ligne se termine également par une nouvelle ligne, mais cela fonctionne pour moi.

mathause
la source
1
Vous n'avez pas besoin de le faire return Nonedans ce cas parce que d'abord, vous n'en avez pas besoin et ensuite, chaque fonction Python retourne Nonepar défaut quand il n'y a pas de returndéclaration.
Anna
10

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, sujette aux erreurs) lorsque vous pouvez appeler file.writedeux fois:

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

notez que les écritures sont tamponnées, ce qui revient au même.

Jean-François Fabre
la source
6
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")
Panos Kal.
la source
4
L'ouverture d'un fichier avec "a" comme paramètre au lieu de "w" ne change pas l'écriture en fonction pour qu'elle fonctionne comme vous l'avez décrit. Le seul effet qu'il a est que le fichier ne sera pas écrasé et le texte sera ajouté à la ligne la plus basse au lieu de commencer en haut à gauche d'un fichier vierge.
démocidiste
2

Juste une note, filen'est pas pris en charge Python 3et a été supprimé. Vous pouvez faire de même avec la openfonction intégrée.

f = open('test.txt', 'w')
f.write('test\n')
user1767754
la source
2

À moins d'écrire dans des fichiers binaires, utilisez l'impression. Exemple ci-dessous, bon pour le formatage des 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:

Mesco
la source
2

Une autre solution qui écrit à partir d'une liste à l'aide de fstring

lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
  for line in lines:
    fhandle.write(f'{line}\n')
citynorman
la source
1

C'est la solution que j'ai trouvée en essayant de résoudre ce problème par moi-même afin de produire systématiquement des \ n comme séparateurs. Il écrit en utilisant une liste de chaînes où chaque chaîne est 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 ""
démocidiste
la source
Pourquoi pas simplement with open(path, "w") as file: for line in strList: file.write(line + "\n")? De cette façon, vous pouvez supprimer tout le travail de liste, la vérification et avoir seulement 3 lignes.
Guimoute