Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Code und Frage passen irgendwie nicht zusammen. Willst du wirklich nur den Zeilenumbruch nach der letzten Zeile entfernen oder möchtest du einen Zeilenumbruch ab einer bestimmten Zeilenlänge, so wie man es in einem Editor hätte?
Der Code ist der erste versuch müsste nur print durch f_out ersetzen. Ich würde den Zeilenumbruch nach der letzten Zeile entfernen momentan. Und ich weiss nicht wie man es am einfachsten macht.
Wende `.rstrip()` auf den gesamten Text an. Das entfernt "Whitspace", also Newlines, Tabs, Leerzeichen am Ende. Du hast es doch eigentlich auch schon für jede Zeile so gemacht. Mach es halt einmal für den gesamten Text und dann kannst du es so in die Datei schreiben.
Die eingabe Datei kann ziemlich gross sein und deshalb wollte ich zeilenweise in eine Datei schreiben. Ich hätte gedacht, dass es etwas einfacherer geht als ich es versucht habe.
snafu hat geschrieben:Wende `.rstrip()` auf den gesamten Text an. Das entfernt "Whitspace", also Newlines, Tabs, Leerzeichen am Ende.
`.rstrip("\n")` wirkt sogar nur auf (Unix-)Newlines am Ende.
Allerdings schneidet .rstrip() auch mehrmals vorkommende Zeichen ab. Ich hab' mir deshalb noch sowas gebaut (was bestimmt noch jemand besser / kürzer schreiben könnte):
Die erste ``if``-Abfrage würde ich auch weglassen. Falls das eine Optimierung sein soll: Dringend überprüfen ob, und wenn überhaupt, was die an Zeit bringt. Mich würde nämlich nicht wundern, wenn dieser Test auch in dem C-Code von `startswith()` als erstes gemacht wird.
def chomp(a, b='\n'):
return a[:-len(b)] if a.endswith(b) else a
Ein "Standard-Timeit" bringt bei mir (etwas betagtes Modell) circa 1,3 Sekunden im Vergleich zu 1,9 Sekunden bei derdons Version bei einem "hello\n". Und mit einem "hello" 1,4 (derdon) knapp 1 Sek (ich).