Scrivere ogni volta una stringa in un file su una nuova riga


259

Voglio aggiungere una nuova riga alla mia stringa ogni volta che chiamo file.write(). Qual è il modo più semplice per farlo in Python?

Risposte:


294

Usa "\ n":

file.write("My String\n")

Vedere il manuale di Python per riferimento.


3
Se stai utilizzando le variabili per comporre il record, puoi aggiungere + "\ n" alla fine, come fileLog.write (var1 + var2 + "\ n").
Filipe,

4
Nelle versioni più recenti di Python (3.6+) puoi anche usare solo f-string:file.write(f"{var1}\n")
halfdan

109

Puoi farlo in due modi:

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

oppure, a seconda della versione di Python (2 o 3):

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

sto usando f.writelines (str (x)) per scrivere in un file in cui x è l'elenco per ora dire come scrivere un elenco x in un file copiando ogni elenco a partire da una nuova riga
kaushik

2
@kaushik: f.write ('\ n'.join (x)) o f.writelines (i +' \ n 'per i in x)
Steven

Penso che il metodo f.write sia migliore in quanto può essere utilizzato sia in Python 2 che 3.
Dang Manh Truong

78

Puoi usare:

file.write(your_string + '\n')

3
è possibile utilizzare l'utilizzo, ad esempio, quando si scrive un int in un file, è possibile utilizzare file.write (str (a) + '\ n')
未来 陆家嘴 顶尖 的 投资 人

@xikhari Why? file.write(f"my number is: {number}\n")va bene e leggibile.
Guimoute,

25

Se lo usi ampiamente (molte righe scritte), puoi sottoclassare 'file':

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')

Ora offre una funzione aggiuntiva che fa quello che vuoi:

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

Forse mi manca qualcosa come diversi caratteri di nuova riga (\ n, \ r, ...) o che anche l'ultima riga sia terminata con una nuova riga, ma funziona per me.


1
In return Nonequesto caso non è necessario perché in primo luogo, non è necessario e in secondo luogo, ogni funzione Python restituisce Noneper impostazione predefinita quando non è presente alcuna returnistruzione.
Anna,

10

potresti fare:

file.write(your_string + '\n')

come suggerito da un'altra risposta, ma perché utilizzare la concatenazione di stringhe (lenta, soggetta a errori) quando è possibile chiamare file.writedue volte:

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

si noti che le scritture sono memorizzate nel buffer, quindi equivale alla stessa cosa.


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")

o

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

4
L'apertura di un file con "a" come parametro anziché "w" non modifica la funzione di scrittura in modo che funzioni nel modo descritto. L'unico effetto che ha è che il file non verrà sovrascritto e il testo verrà aggiunto alla riga più in basso invece di iniziare nella parte superiore sinistra di un file vuoto.
democidista l'

2

Solo una nota, filenon è supportato Python 3ed è stato rimosso. Puoi fare lo stesso con la openfunzione integrata.

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

2

A meno che non si scriva su file binari, utilizzare print. Di seguito un esempio valido per la formattazione di file CSV:

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

Uso:

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])

Appunti:


2

Un'altra soluzione che scrive da un elenco usando fstring

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

1

Questa è la soluzione che ho trovato cercando di risolvere questo problema per me stesso al fine di produrre sistematicamente \ n come separatori. Scrive usando un elenco di stringhe in cui ogni stringa è una riga del file, tuttavia sembra che possa funzionare anche per te. (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 ""

Perché non semplicemente with open(path, "w") as file: for line in strList: file.write(line + "\n")? In questo modo puoi rimuovere tutto il lavoro dell'elenco, il controllo e avere solo 3 righe.
Guimoute,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.