使用Python,“ wb”在此代码中是什么意思?


107

码:

file('pinax/media/a.jpg', 'wb')

另外,您应该考虑使用open而不是filefile已在Python 2中弃用(找不到哪个版本),并已在py3k中删除。(感谢Scott)请参阅此问题以获取更多信息。
路易丝·达米姆

1
使用open替代file,这是在Python 2否定并取消在Python 3.看stackoverflow.com/questions/112970/...
马克斯Ghenis

2
假设它是OP自己的代码,这真的不公平,特别是考虑到问题的性质。显然一次是有效的。
mckenzm

Answers:


112

文件模式,写入和二进制。由于您正在编写.jpg文件,因此看起来不错。

但是,如果您应该阅读该jpg文件,则需要使用 'rb'

更多信息

在Windows上,附加到模式的'b'以二进制模式打开文件,因此也有'rb','wb'和'r + b'之类的模式。Windows上的Python区分文本文件和二进制文件。当读取或写入数据时,文本文件中的行尾字符会自动更改。这种对文件数据的幕后修改对于ASCII文本文件而言是很好的选择,但它会破坏JPEG或EXE文件中的二进制数据。


4
具体来说,在Windows中,以文本模式打开的文件fd.write("foo\n")实际上是写在磁盘上的foo\r\n(请注意\r)。
Serge Ballesta

4
我很确定'b'在每个平台上都以二进制模式打开文件,而不仅仅是Windows,否则在这里也会引起很大的警告。
mckenzm

76

wb指示文件被打开以二进制方式写作。

当以二进制模式写入时,Python在写入文件时不会对数据进行任何更改。但是,在文本模式下(bw或在用或指定文本模式时排除时wt),Python将基于默认文本编码对文本进行编码。此外,Python会将行尾(\n)转换为特定于平台的行尾,这会破坏二进制文件(例如exepng文件)。

因此,在编写文本文件时(无论是使用纯文本还是基于文本的格式,如CSV)都应使用文本模式,而在编写非文本文件(如图像)时,则必须使用二进制模式。

参考文献:

https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files https://docs.python.org/3/library/functions.html#open


1
随着时间的流逝,这可能已经改变。在运行Python 3.6.8的Ubuntu 18.04上,“二进制模式”无疑很重要。尝试写入使用该wb选项打开的文本文件(CSV格式,最终并没有那么重要)时出现错误。通过使用该w选项,我能够使其正常工作。
TheDavidJohnson

1
感谢您的评论@TheDavidJohnson。回到Python 2.6,文档说该b模式仅对Windows有效。现在已从文档和二进制模式中删除“应该用于所有不包含文本的文件”。
丹尼尔·G

1
当然,@ Daniel!感谢您发布解决方案。超过9年后,它仍然很有帮助。那有多好?无论如何,我只想为像我这样的其他人添加一些新信息,他们可能仍然会发现并提供帮助。干杯!
TheDavidJohnson

很好的解释。但是,有一个澄清:您说“因此,在编写文本文件时应使用文本模式”。为了完整起见,我将参考您之前的评论“ Python [在二进制模式下不做任何更改””,并补充说,当您不知道(或关心)编码是什么时,您将在文本文件上使用二进制模式。但是只需要读取或写入字节,或者无论平台如何都希望保留行尾。
pcdev

8

这就是打开文件的方式。“ wb”表示您正在写入文件(w),并且您正在以二进制模式(b)进行写入。

查看文档以了解更多信息:clicky

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.