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?
Antworten
Zu viele Anzeigen?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
Sie könnten eine String-Formatierung im Stil von C verwenden:
file.write("%s\n" % "myString")
Mehr über String-Formatierung .
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 ""
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')
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+"))