コード:
file('pinax/media/a.jpg', 'wb')
コード:
file('pinax/media/a.jpg', 'wb')
回答:
ファイルモード、書き込み、バイナリ。.jpgファイルを書き込んでいるので、問題ありません。
しかし、あなたがそのjpgファイルを読むことになっているなら、あなたは使う必要があります 'rb'
より詳しい情報
Windowsでは、モードに追加された「b」はバイナリモードでファイルを開くため、「rb」、「wb」、「r + b」などのモードもあります。WindowsのPythonでは、テキストファイルとバイナリファイルが区別されます。テキストファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。ファイルデータに対するこの舞台裏の変更は、ASCIIテキストファイルでは問題ありませんが、JPEGファイルやEXEファイルのようなバイナリデータは破損します。
fd.write("foo\n")
実際にディスクに書き込みますfoo\r\n
(に注意してください\r
)。
wb
ファイルがバイナリモードで書き込みのためにオープンされていることを示します。
バイナリモードで書き込む場合、Pythonはファイルに書き込まれるときにデータを変更しません。ただし、テキストモードでは(b
がで除外される場合、w
またはでテキストモードを指定する場合wt
)、Pythonはデフォルトのテキストエンコーディングに基づいてテキストをエンコードします。さらに、Pythonは行末(\n
)をプラットフォーム固有の行末に変換します。これにより、exe
またはpng
ファイルのようなバイナリファイルが破損します。
したがって、テキストモード(テキスト形式またはCSVなどのテキストベースの形式を使用する場合)を書き込む場合はテキストモードを使用し、画像などの非テキストファイルを書き込む場合はバイナリモードを使用する必要があります。
参照:
https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/3/library/functions.html#open
wb
オプションで開かれたテキストファイル(CSV形式、最終的にはそれほど重要ではない)に書き込もうとしてエラーが発生しました。w
代わりにオプションを使用することで、適切に機能させることができました。
b
モードはWindowsにのみ影響を与えるとのことです。これは現在、ドキュメントとバイナリモードから削除されています。「テキストを含まないすべてのファイルに使用する必要があります」。
open
代わりに使用することを検討する必要がありfile
ます。file
Python 2で廃止され(どのバージョンが見つからなかったか)、py3kで削除されました。(スコットに感謝)詳細についてはこの質問を参照してください。