一、从二进制文件中读取数据
读取二进制文件中的数据需要三个步骤:
1、打开文件
格式:f=open(file,mode="rb")
作用:打开file文件,只能读取文件数据(字节串)。open函数返回一个_io.TextIOWrapper对象。如果文件不存在,则会触发FileNotFoundError异常。文件名可包含路径。不包含路径时为当前工作路径。如:f=open("infs.jpg","rb")。
特别提示:
mode参数也可取以下值:
(1)"r+b"。打开文件后,可以读取数据,也可以将数据写入文件。文件必须存在。
(2)"w+b"。打开文件后,可以读取数据,也可以将数据写入文件。文件存在则覆盖;文件不存在则创建。
(3)"a+b"。打开文件后,可以读取数据,也可以将数据写入文件(数据只能添加到文件尾)。文件不存在则创建。
2、读取数据
从文件读取的数据是bytes类型(字节串)。读取数据的主要方法有:
(1)使用read方法
格式:read([size])
作用:从文件当前位置读取size字节。不指定size时读取全部数据。
(2)使用readline方法
格式:readline(size=-1)
作用:从当前位置读取一行数据(size=-1时,包括回车符)。如果size>0,则只读取一行的前size个字节。
(3)使用readlines方法
格式:readlines(hint=-1)
作用:读出所有行(hint=-1时)。返回的是以行为元素的列表。如果hint>0,则仅读取第hint个字节所在行及其前面各行的数据。
(4)使用文件对象(是可迭代对象)。如:f=open("a.jpg","rb");a=list(f);f.close()
3、关闭文件
调用文件对象的close方法即可关闭文件。
特别提示:
(1)也可使用with语句打开文件,这时读取数据后文件会自动关闭,无需调用文件对象的close方法。如:with open("a.jpg") as f:d=f.read()
(2)利用seek(offest,from)可以重定位文件读取位置。参数offest指定需要移动的字节数,from指定移动的开始位置。可以是: 0(文件头)、1(当前位置)、2(文件尾)。
二、将数据写入文件
只能将字节串写入文件。基本步骤是:
1、打开文件
格式:f=open(file,mode="wb")
作用:打开file指定的文件,打开的文件只能写入数据,不能读取数据。如果文件存在,则会清空文件内容。如果文件不存在,则会创建文件。也可将参数mode设置为"ab"(追加模式,只能将数据添加到文件尾)、"r+b"、"w+b"、"a+b"。请参考“从文件读取数据”的“打开文件”部分。
2、将数据写入文件
可以使用以下方法将bytes类型的数据写入文件:
(1)文件对象的write方法
格式:write(str)
作用:将数据写入文件。str必须是字节串。
示例:f=open("c:\\x.ppk","w");f.write(b"good");f.close()
(2)文件对象的writelines方法
格式:writelines(line)
作用:将多行数据写入文件。line为行数据组成的列表。
示例:f=open("C:\\x.txt","wb");f.writelines([b'a\n',b'b\n',b'c']);f.close()
(3)print函数
格式:print(*obj,sep=' ',end='\n',file)
作用:在文件对象file上输出obj指定的数据。
示例:f=open("C:\\x.txt","w");print(b"How are you",file=f);f.close()
3、关闭文件
调用文件对象的close方法即可关闭文件。
特别提示:
(1)也可使用with语句打开文件,这时读取数据后文件会自动关闭,无需调用文件对象的close方法。如:with open("a.ppk","wb") as f:f.write(b"good")
(2)利用seek(offest,from)可以重定位文件写入位置。参数offest指定需要移动的字节数,from指定移动的开始位置。可以是: 0(文件头)、1(当前位置)、2(文件尾)。

