YOU*_*YOU 96

文件模式,写入和二进制.由于你正在写一个.jpg文件,它看起来很好.

但是如果你想读取你需要使用的jpg文件 'rb'

更多信息

在Windows上,附加到模式的'b'以二进制模式打开文件,因此还有'rb','wb'和'r + b'等模式.Windows上的Python区分了文本和二进制文件; 读取或写入数据时,文本文件中的行尾字符会自动稍微改变.这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据.

  • 具体来说,在Windows中,对于在文本模式下打开的文件,`fd.write("foo \n")`实际写入磁盘`foo\r \n`(注意`\ r``). (4认同)
  • 我很确定 'b' 在每个平台上都以二进制模式打开文件,而不仅仅是 Windows,否则这里也会有一个巨大的警告。 (4认同)

Dan*_*l G 64

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

在Unix系统(Linux,Mac OS X等)上,二进制模式不执行任何操作 - 它们处理文本文件的方式与处理任何其他文件的方式相同.但是,在Windows上,文本文件的写入行略有修改.在处理实际的二进制文件(如文件bw文件)时,这会导致严重的问题.因此,当打开不应该是文本的文件时,即使在Unix中,也应该使用wt\n.使用plain exepng仅用于文本文件.

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

  • 感谢您的评论@TheDavidJohnson。早在 Python 2.6 中,文档就说“b”模式仅对 Windows 有效。现在已从文档中删除,二进制模式“应该用于所有不包含文本的文件”。 (2认同)
  • 当然可以,@丹尼尔!我很感谢您发布您的解决方案。9年多过去了,它仍然很有帮助。那有多棒?无论如何,我只是想为像我这样的人添加一些新信息,他们可能仍然会发现这很有帮助。干杯! (2认同)
  • 很好的解释。不过,有一点需要澄清:您说_“因此在编写文本文件时应使用文本模式”_。为了完整起见,我会参考您之前的评论“Python [在二进制模式下]不进行任何更改”,并补充说,当您不知道(或关心)编码是什么时,您将在文本文件上使用二进制模式但只需要读取或写入字节,或者如果您想保留行结尾而不管平台如何。 (2认同)

Gle*_*ord 7

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

查看文档以获取更多信息:clicky