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?Wenn write ein Callback ist, benötigen Sie möglicherweise ein eigenes writeln.
def writeln(self, string):
self.f.write(string + '\n')
Es befindet sich im Inneren eines speziellen Öffners. Siehe Antworten und Feedback für diese Frage: Unterklassifizierung von Dateiobjekten (zur Erweiterung von Öffnungs- und Schließvorgängen) in Python 3
(Kontext-Manager)
Ich bin auf dieses Problem gestoßen, als ich ftplib zum "Abrufen von Zeilen" aus einer Datei verwendet habe, die auf Datensätzen basiert (FB80):
with open('somefile.rpt', 'w') as fp:
ftp.retrlines('RETR USER.REPORT', fp.write)
und endete mit einem langen Datensatz ohne Zeilenumbrüche, dies ist wahrscheinlich ein Problem mit ftplib, aber obskur.
So wurde dies:
with OpenX('somefile.rpt') as fp:
ftp.retrlines('RETR USER.REPORT', fp.writeln)
Es erfüllt seinen Zweck. Dies ist ein Anwendungsfall, nach dem einige Leute suchen werden.
Vollständige Erklärung (nur die letzten beiden Zeilen sind von mir):
class OpenX:
def __init__(self, filename):
self.f = open(filename, 'w')
def __enter__(self):
return self.f
def __exit__(self, exc_type, exc_value, traceback):
self.f.close()
def writeln(self, string):
self.f.write(string + '\n')
- See previous answers
- Weitere Antworten anzeigen