Je veux ajouter une nouvelle ligne à ma chaîne chaque fois que j'appelle file.write()
. Quel est le moyen le plus simple de faire cela en Python ?
Réponses
Trop de publicités?
citynorman
Points
1131
Une autre solution qui écrit depuis une liste en utilisant fstring
lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
for line in lines:
fhandle.write(f'{line}\n')
Et en fonction
def write_list(fname, lines):
with open(fname, "w") as fhandle:
for line in lines:
fhandle.write(f'{line}\n')
write_list('filename.txt', ['hello','world'])
Kabamaru
Points
2563
Mesco
Points
428
À moins d'écrire dans des fichiers binaires, utilisez print. L'exemple ci-dessous est bon pour le formatage des fichiers csv :
def write_row(file_, *columns):
print(*columns, sep='\t', end='\n', file=file_)
Utilisation :
PHI = 45
with open('file.csv', 'a+') as f:
write_row(f, 'header', 'phi:', PHI, 'serie no. 2')
write_row(f) # additional empty line
write_row(f, data[0], data[1])
Notes :
- imprimer la documentation
-
'{}, {}'.format(1, 'the_second')
- https://pyformat.info/ , PEP-3101 - ' \t ' - caractère de tabulation
-
*columns
dans la définition de la fonction - distribue un nombre quelconque d'arguments à la liste - voir question sur les *args et **kwargs
user1767754
Points
460
chough
Points
66
Je n'avais vraiment pas envie de taper \n
à chaque fois et La réponse de @matthause n'a pas semblé fonctionner pour moi, alors j'ai créé ma propre classe
class File():
def __init__(self, name, mode='w'):
self.f = open(name, mode, buffering=1)
def write(self, string, newline=True):
if newline:
self.f.write(string + '\n')
else:
self.f.write(string)
Et le voici mis en œuvre
f = File('console.log')
f.write('This is on the first line')
f.write('This is on the second line', newline=False)
f.write('This is still on the second line')
f.write('This is on the third line')
Cela devrait apparaître dans le fichier journal comme
This is on the first line
This is on the second lineThis is still on the second line
This is on the third line