2010-04-19 9 views

Antwort

65

File mode, schreiben und binär. Da Sie eine JPG-Datei schreiben, sieht es gut aus.

Aber wenn Sie diese JPG-Datei lesen, soll müssen Sie verwenden 'rb'

Mehr Infos

Unter Windows ‚b‘ in den Modus beigefügten die Datei in Binär-Modus öffnet, so Es gibt auch Modi wie 'rb', 'wb', und 'r + b'. Python unter Windows macht eine Unterscheidung zwischen Text und binären Dateien; Die Zeilenendezeichen in Textdateien werden beim Lesen oder Schreiben von Daten automatisch leicht geändert . Diese hinter den Kulissen Änderung an Datei Daten ist in Ordnung für ASCII-Text Dateien, aber es wird Binärdaten wie in JPEG oder EXE-Dateien beschädigt.

+3

Konkret, in Windows für eine im Textmodus geöffnete Datei schreibt 'fd.write (" foo \ n ")' tatsächlich auf die Festplatte 'foo \ r \ n' (beachten Sie das' \ r'). –

3

Das ist der Modus, mit dem Sie die Datei öffnen. "wb" bedeutet, dass Sie in die Datei schreiben (w) und dass Sie im Binärmodus schreiben (b).

Schauen Sie sich die Dokumentation für mehr: clicky

38

Die wb zeigt an, dass die Datei zum Schreiben in Binär-Modus geöffnet wird.

Auf Unix-Systemen (Linux, Mac OS X usw.) macht der Binärmodus nichts - sie behandeln Textdateien auf die gleiche Weise wie andere Dateien. Unter Windows werden jedoch Textdateien mit leicht modifizierten Zeilenenden geschrieben. Dies verursacht ein ernstes Problem im Umgang mit tatsächlichen Binärdateien, wie exe oder jpg Dateien. Wenn Sie also Dateien öffnen, die selbst unter Unix kein Text sein sollen, sollten Sie wb oder rb verwenden. Verwenden Sie einfach w oder r nur für Textdateien.

Referenz: http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files

4

Auch sollten Sie statt file mit open betrachten. file war in Python 2 veraltet (konnte die Version nicht finden) und wurde in py3k entfernt. (Danke Scott)

Siehe this question für weitere Informationen.

+1

Diese Antwort wäre wahrscheinlich besser als Kommentar zur ersten Antwort. –

+2

Die Verwendung von 'file' anstelle von' open' ist in Python 2 für einige Zeit veraltet. Es wurde * aus Python 3 * entfernt. –

+0

@Scott: Danke, habe meine Antwort bearbeitet. @ Brian: Du hast Recht, ich werde das nächste Mal tun, danke. –