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?

kaushik
quelle

Antworten:

294

Verwenden Sie "\ n":

file.write("My String\n")

Weitere Informationen finden Sie im Python-Handbuch .

Halfdan
quelle
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
Greg Hewgill
quelle
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')
Krishna K.
quelle
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.

mathause
quelle
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.

Jean-François Fabre
quelle
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")
Panos Kal.
quelle
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')
user1767754
quelle
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:

Mesco
quelle
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')
Stadtmensch
quelle
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 ""
Demokrat
quelle
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