425 Stimmen

Zeichenkette jedes Mal in einer neuen Zeile in eine Datei schreiben

Ich möchte jedes Mal einen Zeilenumbruch an meinen String anhängen, wenn ich file.write() . Wie lässt sich dies in Python am einfachsten bewerkstelligen?

2voto

josh Punkte 354

Ich wollte wirklich nicht tippen \n jedes einzelne Mal und @matthause's Antwort schien bei mir nicht zu funktionieren, also habe ich meine eigene Klasse

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)

Und hier wird sie umgesetzt

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

Dies sollte in der Protokolldatei wie folgt angezeigt werden

This is on the first line
This is on the second lineThis is still on the second line
This is on the third line

2voto

Vincent B Punkte 31

Sie könnten eine String-Formatierung im Stil von C verwenden:

file.write("%s\n" % "myString")

Mehr über String-Formatierung .

1voto

democidist Punkte 95

Dies ist die Lösung, die ich mir ausgedacht habe, als ich versuchte, dieses Problem für mich selbst zu lösen, um systematisch zu produzieren \n 's als Trennzeichen. Es schreibt mit einer Liste von Zeichenfolgen, wo jeder String ist eine Zeile der Datei, aber es scheint, dass es für Sie auch funktionieren kann. (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 ""

1voto

Pijukatel Punkte 21

Sie können die Methode an den Stellen ausschmücken, an denen Sie dieses Verhalten benötigen:

#Changed behavior is localized to single place.
with open('test1.txt', 'w') as file:    
    def decorate_with_new_line(method):
        def decorated(text):
            method(f'{text}\n')
        return decorated
    file.write = decorate_with_new_line(file.write)

    file.write('This will be on line 1')
    file.write('This will be on line 2')
    file.write('This will be on line 3')

#Standard behavior is not affected. No class was modified.
with open('test2.txt', 'w') as file:

    file.write('This will be on line 1')
    file.write('This will be on line 1')
    file.write('This will be on line 1')

1voto

Nwoye CID Punkte 608

Verwendung von append (a) con open() in einem print() Aussage sieht für mich einfacher aus:

save_url  = ".\test.txt"

your_text = "This will be on line 1"
print(your_text, file=open(save_url, "a+"))

another_text = "This will be on line 2"
print(another_text, file=open(save_url, "a+"))

another_text = "This will be on line 3"
print(another_text, file=open(save_url, "a+"))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X