代码:
file('pinax/media/a.jpg', 'wb')
文件模式,写入和二进制。由于你正在写入一个 .jpg 文件,所以看起来没问题。
但是,如果你想要读取那个 jpg 文件,你需要使用 'rb'
。
更多信息
在Windows上,如果将'b'添加到模式中,则会以二进制模式打开该文件,因此还有像'rb'、'wb'和'r+b'这样的模式。Python在Windows上区分文本文件和二进制文件;在读取或写入数据时,文本文件中的行尾字符会自动略微更改。这种对文件数据的幕后修改对ASCII文本文件来说很好,但它会破坏像JPEG或EXE文件中那样的二进制数据。
fd.write("foo\n")
实际上会写入磁盘 foo\r\n
(请注意\r
)。 - Serge Ballestawb
表示以二进制模式打开文件以进行写操作。
在二进制模式下写入时,Python 不会对数据进行任何更改。但是,在文本模式下(当省略 b
或指定了文本模式 wt
时),Python 将根据默认文本编码对文本进行编码。此外,Python 还会将换行符(\n
)转换为特定于平台的换行符,这会破坏像 exe
或 png
等二进制文件。
因此,在编写文本文件(无论是使用纯文本还是类似 CSV 的基于文本的格式)时应使用文本模式,而在编写像图像这样的非文本文件时必须使用二进制模式。
参考资料:
https://docs.python.org/zh-cn/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/zh-cn/3/library/functions.html#open
wb
选项打开文本文件(CSV格式,最终并不那么重要),但是出现错误。通过改用w
选项,我成功地使其正常工作。 - TheDavidJohnsonb
模式仅对Windows有影响。现在已从文档中删除了该内容,并且“二进制模式应该用于所有不包含文本的文件”。 - Daniel G
open
而不是file
。在Python 2中,file
已被弃用(找不到哪个版本),并已在py3k中删除。(感谢Scott)有关更多信息,请参见此问题。 - Luiz Damimfile
,请使用open
。请参见https://dev59.com/4XVD5IYBdhLWcg3wBm1h。 - Max Ghenis