Python-Datei.schreiben Sie die Schaffung zusätzlicher Wagenrücklauf
Ich Schreibe eine Reihe von SQL-Anweisungen in eine Datei mit python. Die template-string sieht wie folgt aus:
store_insert = '\tinsert stores (storenum, ...) values (\'%s\', ...)'
Ich Schreibe die Datei so auf:
for line in source:
line = line.rstrip()
fields = line.split('\t')
script.write(store_insert % tuple(fields))
script.write(os.linesep)
Allerdings in der Ausgabe, ich sehe \r\r\n am Ende jeder Zeile, sondern als \r\n als ich erwarten würde. Warum?
%
string-Formatierung ist jetzt alt; die bevorzugte Sprache ist str.format
=)Wussten Sie, öffnen die Datei im text-oder Binär-Modus? Welches OS verwenden Sie?
Windows, und ich habe gerade ein open(Datei, 'r')
oh für die Ausgabe-Datei habe ich open(outputFile, 'w')
Ok, ich öffnete die Datei mit "open(Datei, 'wb')" statt (für binary-Modus) und das problem behoben. Warum ist python konvertieren meine \\r \ \ n \\r \ \ r\ \ n beim öffnen der Datei im text-Modus?
InformationsquelleAutor Chris | 2010-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
\n
umgewandeltos.linesep
für geöffnete Dateien im text-Modus. Also, wenn Sie schreibenos.linesep
um ein text-Modus-Datei auf Windows, schreiben Sie\r\n
, und die\n
umgewandelt wird was in\r\r\n
.Siehe auch die docs:
Ich benutze auch windows 7, aber das erklärt es. +1 und Antwort!
InformationsquelleAutor adw
Mit Python 3
os.open()
stellt den neuen parameternewline
können Sie eine Zeichenkette angeben, die alle vorkommen von\n
übersetzt wird.Übergabe eines leeren string-argument
newline=''
schaltet die übersetzung, verlassen Sie das neue-Zeile-Zeichen als es ist. Gültig nur text-Modus.Aus der Dokumentation
InformationsquelleAutor Daniele Bacarella
Text-Dateien haben unterschiedliche Zeilenenden auf verschiedenen Betriebssystemen, aber es ist bequemer zu arbeiten mit Zeichenfolgen, die eine einheitliche Zeilenende-Zeichen. Python übernimmt die Konvention von C mit
'\n'
als universal-Zeilenende-Zeichen und im Vertrauen auf die Datei lese-und schreib-Funktionen für die Konvertierung, wenn nötig. Die read-und write-Funktionen kennen, um dies zu tun, wenn die Datei geöffnet wurde, in die Standard -text
- Modus. Wenn Sie fügen Sie dieb
Zeichen der Zeichenkette Modus beim öffnen der Datei, diese übersetzung wird übersprungen.InformationsquelleAutor Mark Ransom
sehen die öffnen() doc:
Zusätzlich zu den standard-fopen () - Werte kann sich der Modus 'U' oder 'rU'. Python ist in der Regel gebaut mit universal newline support; Versorgung 'U' öffnet die Datei als text-Datei, aber Linien kann beendet werden, indem eine der folgenden: das Unix-Zeilenende-Konvention '\n', das Macintosh-Konvention, '\r', oder die Windows-Konvention mit '\r\n'. Alle diese externen Repräsentationen gesehen werden, als '\n' durch das Python-Programm. Wenn Python gebaut wird, ohne universal newline support einen Modus mit 'U' ist das gleiche wie normalen text-Modus. Beachten Sie, dass Datei-Objekte, so eröffnet auch ein Attribut namens "Zeilenumbrüche, die einen Wert von "None" (wenn keine Zeilenumbrüche haben doch gesehen worden), '\n', '\r', '\r\n', oder ein Tupel, welches alle newline-Typen gesehen.
ich glaube, was er sagt, ist, dass wenn er eine Datei öffnen mit open(", 'r'), nachdem er schrieb auf es er sehen, \r\r\n und er denkt, dass er nur schreiben '\r\n' (windows), so sagte ich ihm, als er öffnet seine Datei open() wird automatisch \r\n zu , seine Daten so '\r\n' + '\r\n' = '\r\r\n' , '\n' entfernt wird, wollen Sie mir mehr erarbeiten ???
Nein, ich bin tatsächlich mit einer separaten Ausgabe-Datei geöffnet eine Datei mit open(file, 'w'). Wechsel zu open(Datei, 'wb') das problem behoben, aber ich bin mir nicht ganz sicher, ob ich verstehe, warum
InformationsquelleAutor mouad
Funktioniert bei mir:
Sind Sie sicher, dies ist der code, der ausgeführt wird, dass
os.linesep
ist, was Sie denken, es ist, etc?InformationsquelleAutor Katriel