Schreiben Sie jedes Mal eine Zeichenfolge in eine Datei in einer neuen Zeile


259

Ich möchte bei jedem Anruf eine neue Zeile an meine Zeichenfolge anhängen file.write(). Was ist der einfachste Weg, dies in Python zu tun?

Antworten:


294

Verwenden Sie "\ n":

file.write("My String\n")

Weitere Informationen finden Sie im Python-Handbuch .


3
Wenn Sie Variablen zum Erstellen des Datensatzes verwenden, können Sie am Ende + "\ n" hinzufügen, z. B. fileLog.write (var1 + var2 + "\ n").
Filipe

4
In neueren Versionen von Python (3.6+) können Sie auch nur F-Strings verwenden:file.write(f"{var1}\n")
Halfdan

109

Sie können dies auf zwei Arten tun:

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

oder, abhängig von Ihrer Python-Version (2 oder 3):

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

Ich benutze f.writelines (str (x)), um in eine Datei zu schreiben, in der x eine Liste ist, um jetzt zu sagen, wie man eine Liste x in eine Datei schreibt, die jede Liste ab einer neuen Zeile
kopiert

2
@kaushik: f.write ('\ n'.join (x)) oder f.writelines (i +' \ n 'für i in x)
Steven

Ich denke, die f.write-Methode ist besser, da sie sowohl in Python 2 als auch in Python 3 verwendet werden kann.
Dang Manh Truong

78

Sie können verwenden:

file.write(your_string + '\n')

3
Sie können die Verwendung verwenden, wenn Sie beispielsweise ein Int in eine Datei schreiben, können Sie file.write (str (a) + '\ n')
未来 陆家嘴 顶尖 的 投资

@xikhari Warum? file.write(f"my number is: {number}\n")ist gut und lesbar.
Guimoute

25

Wenn Sie es häufig verwenden (viele geschriebene Zeilen), können Sie 'Datei' in Unterklassen unterteilen:

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

Jetzt bietet es eine zusätzliche Funktion, die macht, was Sie wollen:

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

Vielleicht fehlen mir so etwas wie verschiedene Zeilenumbrüche (\ n, \ r, ...) oder dass die letzte Zeile auch mit einem Zeilenumbruch abgeschlossen wird, aber das funktioniert bei mir.


1
return NoneDies ist in diesem Fall nicht erforderlich, da erstens Sie es nicht benötigen und zweitens jede Python-Funktion Nonestandardmäßig zurückgegeben wird, wenn keine returnAnweisung vorhanden ist.
Anna

10

du könntest es tun:

file.write(your_string + '\n')

Wie in einer anderen Antwort vorgeschlagen, aber warum sollten Sie die Verkettung von Zeichenfolgen (langsam, fehleranfällig) verwenden, wenn Sie file.writezweimal aufrufen können :

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

Beachten Sie, dass Schreibvorgänge gepuffert sind, sodass es sich um dasselbe handelt.


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

oder

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

4
Durch das Öffnen einer Datei mit "a" als Parameter anstelle von "w" wird das Schreiben in eine Funktion geändert, die so funktioniert, wie Sie es beschrieben haben. Der einzige Effekt ist, dass die Datei nicht überschrieben wird und Text in die unterste Zeile eingefügt wird, anstatt oben links in einer leeren Datei zu beginnen.
Demokratist

2

Nur eine Notiz, filewird in nicht unterstützt Python 3und wurde entfernt. Sie können dasselbe mit der openeingebauten Funktion tun .

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

2

Verwenden Sie print, es sei denn, Sie schreiben in Binärdateien. Das folgende Beispiel eignet sich zum Formatieren von CSV-Dateien:

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

Verwendung:

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

Anmerkungen:


2

Eine andere Lösung, die mit fstring aus einer Liste schreibt

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

1

Dies ist die Lösung, die ich gefunden habe, um dieses Problem für mich selbst zu lösen und systematisch \ n als Trennzeichen zu erzeugen. Es wird mit einer Liste von Zeichenfolgen geschrieben, wobei jede Zeichenfolge eine Zeile der Datei ist. Es scheint jedoch, dass dies auch für Sie funktioniert. (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 ""

Warum nicht einfach with open(path, "w") as file: for line in strList: file.write(line + "\n")? Auf diese Weise können Sie alle Listenarbeiten und Überprüfungen entfernen und haben nur 3 Zeilen.
Guimoute
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.