Wie schreibe ich in modernem Python eine Zeile in eine Datei? Ich habe gehört, dass dies veraltet ist:
print >>f, "hallo"
Funktioniert "\n"
auf allen Plattformen oder sollte ich "\r\n"
auf Windows verwenden?
Wie schreibe ich in modernem Python eine Zeile in eine Datei? Ich habe gehört, dass dies veraltet ist:
print >>f, "hallo"
Funktioniert "\n"
auf allen Plattformen oder sollte ich "\r\n"
auf Windows verwenden?
Wenn Sie viele Daten schreiben und Geschwindigkeit eine Rolle spielt, sollten Sie wahrscheinlich mit f.write(...)
gehen. Ich habe einen schnellen Geschwindigkeitsvergleich gemacht und es war deutlich schneller als print(..., file=f)
, wenn eine große Anzahl von Schreibvorgängen durchgeführt wird.
import time
start = start = time.time()
with open("test.txt", 'w') as f:
for i in range(10000000):
# print('This is a speed test', file=f)
# f.write('This is a speed test\n')
end = time.time()
print(end - start)
Im Durchschnitt dauerte write
2,45 Sekunden auf meinem Rechner, während print
etwa 4 Mal so lange dauerte (9,76 Sekunden). In den meisten realen Szenarien wird dies jedoch kein Problem darstellen.
Wenn Sie sich dafür entscheiden, print(..., file=f)
zu verwenden, werden Sie wahrscheinlich feststellen, dass Sie gelegentlich das Zeilenumbruch unterdrücken oder durch etwas anderes ersetzen möchten. Dies kann durch Festlegen des optionalen end
-Parameters erfolgen, z. B .;
with open("test", 'w') as f:
print('Foo1,', file=f, end='')
print('Foo2,', file=f, end='')
print('Foo3', file=f)
Wie auch immer Sie sich entscheiden, würde ich vorschlagen, with
zu verwenden, da der Code dadurch viel einfacher zu lesen ist.
Aktualisierung: Dieser Leistungsunterschied erklärt sich daraus, dass write
stark gepuffert ist und zurückkehrt, bevor tatsächlich irgendwelche Schreibvorgänge auf die Festplatte erfolgen (siehe diese Antwort), während print
(wahrscheinlich) eine Zeilenpufferung verwendet. Ein einfacher Test hierfür wäre die Überprüfung der Leistung für lange Schreibvorgänge, bei denen die Nachteile (in Bezug auf Geschwindigkeit) für Zeilenpufferung weniger stark ausgeprägt wären.
start = start = time.time()
long_line = 'This is a speed test' * 100
with open("test.txt", 'w') as f:
for i in range(1000000):
# print(long_line, file=f)
# f.write(long_line + '\n')
end = time.time()
print(end - start, "s")
Der Leistungsunterschied wird nun deutlich geringer, mit einer durchschnittlichen Zeit von 2,20 Sekunden für write
und 3,10 Sekunden für print
. Wenn Sie eine Menge Zeichenketten verknüpfen müssen, um diese lange Linie zu erhalten, wird die Leistung leiden, daher sind Anwendungsfälle, in denen print
effizienter wäre, etwas seltener.
Wenn Sie Line sagen, bedeutet das einige serialisierte Zeichen, die mit '\n'-Zeichen enden. Die Zeile sollte irgendwann das Letzte sein, also sollten wir am Ende jeder Zeile '\n' berücksichtigen. Hier ist die Lösung:
with open('YOURFILE.txt', 'a') as the_file:
the_file.write("Hallo")
Im Anhänge-Modus bewegt sich der Cursor nach jedem Schreibvorgang in eine neue Zeile. Wenn Sie den Modus w
verwenden möchten, sollten Sie am Ende der write()
-Funktion \n
-Zeichen hinzufügen:
the_file.write("Hallo\n")
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.