Ist dies der sauberste Weg, um eine Liste in eine Datei zu schreiben, da writelines()
fügt keine Zeilenumbrüche ein?
file.writelines(["%s\n" % item for item in list])
Es scheint, als gäbe es eine Standardmethode...
Ist dies der sauberste Weg, um eine Liste in eine Datei zu schreiben, da writelines()
fügt keine Zeilenumbrüche ein?
file.writelines(["%s\n" % item for item in list])
Es scheint, als gäbe es eine Standardmethode...
Sie können eine Schleife verwenden:
with open('your_file.txt', 'w') as f:
for item in my_list:
f.write("%s\n" % item)
In Python 2 können Sie auch
with open('your_file.txt', 'w') as f:
for item in my_list:
print >> f, item
Wenn Sie auf einen einzelnen Funktionsaufruf Wert legen, sollten Sie zumindest die eckigen Klammern entfernen []
so dass die zu druckenden Zeichenketten eine nach der anderen erstellt werden (ein genexp anstelle eines listcomp) -- kein Grund, den gesamten Speicher zu belegen, der erforderlich ist, um die gesamte Liste der Zeichenketten zu materialisieren.
Das ist nicht sonderlich komplex, aber warum nicht einfach pickle oder json verwenden, so dass Sie sich nicht um die Serialisierung und Deserialisierung kümmern müssen?
Zum Beispiel, weil Sie eine Textdatei ausgeben möchten, die leicht gelesen, bearbeitet usw. werden kann, mit einem Eintrag pro Zeile. Das ist kein seltener Wunsch;-).
Ich habe festgestellt, dass die \n in der ersten Version war unter Python 2.7/Windows überflüssig
Was werden Sie mit der Datei tun? Gibt es diese Datei für Menschen oder andere Programme mit klaren Interoperabilitätsanforderungen?
Wenn Sie nur versuchen, eine Liste auf der Festplatte für die spätere Verwendung durch die gleiche Python-Anwendung zu serialisieren, sollten Sie Beizen die Liste.
import pickle
with open('outfile', 'wb') as fp:
pickle.dump(itemlist, fp)
Um es zurückzulesen:
with open ('outfile', 'rb') as fp:
itemlist = pickle.load(fp)
+1 - outfile ist etwa so: open( "save.p", "wb" )
infile ist etwa so: open( "save.p", "rb" )
Das Problem ist, dass die Liste in den Speicher passen muss. Wenn dies nicht der Fall ist, ist Zeile für Zeile eine mögliche Strategie (oder eine Alternative wie in stackoverflow.com/questions/7180212/ )
Der einfachere Weg ist:
with open("outfile", "w") as outfile:
outfile.write("\n".join(itemlist))
Mit einem Generatorausdruck können Sie sicherstellen, dass alle Elemente in der Elementliste Zeichenketten sind:
with open("outfile", "w") as outfile:
outfile.write("\n".join(str(item) for item in itemlist))
Denken Sie daran, dass alle itemlist
Liste muss sich im Speicher befinden, achten Sie also auf den Speicherverbrauch.
Die erste Frage, die mir in den Sinn kommt, ist natürlich, ob der OP einen Zeilenumbruch am Ende braucht und ob die Anzahl der Leerzeichen eine Rolle spielt oder nicht. Sie wissen ja, was man über verfrühte Optimierungen sagt.
Ein Nachteil: Der gesamte Inhalt der Datei wird im Speicher konstruiert, bevor er herausgeschrieben wird, so dass es zu einem hohen Speicherverbrauch kommen kann.
Verwendung von Python 3 y Python 2.6+ Syntax:
with open(filepath, 'w') as file_handler:
for item in the_list:
file_handler.write("{}\n".format(item))
Dies ist plattformunabhängig. Außerdem wird die letzte Zeile mit einem Zeilenumbruch abgeschlossen, der ein Bewährte UNIX-Verfahren .
Beginnend mit Python 3.6, "{}\n".format(item)
kann durch eine f-Zeichenkette ersetzt werden: f"{item}\n"
.
Ich möchte nicht hinzufügen " \n "Was ist beim letzten Punkt zu tun? Ich möchte keine if-Bedingung.
@pyd Ersetzen Sie die for-Schleife durch file_handler.write("\n".join(str(item) for item in the_list))
Ein anderer Weg. Serialisieren zu json mit simplejson (enthalten als json in Python 2.6):
>>> import simplejson
>>> f = open('output.txt', 'w')
>>> simplejson.dump([1,2,3,4], f)
>>> f.close()
Wenn Sie output.txt untersuchen:
[1, 2, 3, 4]
Das ist nützlich, weil die Syntax pythonisch ist, sie ist für Menschen lesbar und kann von anderen Programmen in anderen Sprachen gelesen werden.
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.
53 Stimmen
Beachten Sie bitte, dass
writelines
fügt keine Zeilenumbrüche hinzu, weil es diereadlines
was sie ebenfalls nicht entfernt.1 Stimmen
Es zwischen json vs pickle. lesen Sie alles darüber - stackoverflow.com/questions/27745500/