朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow
声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!
在Python 3.0和Python 2.6中,文件类型都由open的第二个参数决定,这个参数可以称为模式字符串,如果字符串里包含一个“b”那么就表示以二进制的形式打开文件,否则就是以文本的形式。
Python一直都支持文本和二进制文件,但是在Python 3.0中,二者之间有了明显的区别:
•文本文件把内容表示为常规的str字符串,自动执行Unicode编码和解码,并且默认执行末行转换。
•二进制文件把内容表示为一个特殊的bytes字符串类型,并且允许程序不修改地访问文件内容。
如果需要处理国际化应用程序或者面向字节的数据,Python 3.0中的区别会影响到代码。通常,你必须使用bytes字符串处理二进制文件,而用常规的str字符串处理文本文件。此外,由于文本文件实现了Unicode编码,所以不能以文本模式打开一个二进制数据文件——否则将其内容解码为Unicode文本时可能会失败。
让我们来看一个示例。当你读取一个二进制数据文件的时候,将得到了一个bytes对象:
>>> data = open('data.bin','rb').read() # Open binary file: rb=read binary >>> data # bytes string holds binary data b'\x00\x00\x00\x07spam\x00\x08' >>> data[4:8] # Act like strings b'spam' >>> data[0] # But really are small 8-bit integers 115 >>> bin(data[0]) # Python 3.0 bin() function '0b1110011'
此外,二进制文件不会对数据执行任何末行转换。所以在读取和写入文件时要分清楚是用文本形式还是用二进制形式。以文本形式写入的文件,在读取时也要用文本形式。以二进制形式写入的文件,在读取时就要用二进制形式!