《Python游戏编程入门》中“3.3 文件输入/输出”主要介绍了读写文本文件和二进制文件的方法。
“3.3.1操作文本”介绍了文本文件的读写方法,请参考、以及。
“3.3.2 操作二进制文件”介绍了二进制文件的读写方法。
二进制文件的特点是直接以二进制形式存储数据,不包含任何文本或可读字符,例如JPEG和PNG等图像文件、MP3和WAV等格式的音频文件、MP4和AVI等格式的视频文件以及WORD和EXCEL等格式的文档文件都属于二进制文件。
二进制文件中包含的数据是“字节串”格式的,因此在向二进制文件中写入数据时,需要将数据转换为“字节串”格式。
相关链接1,“字节串”是以b开头的“字符串”,例如b’x00x040x00x00’,表示的是原始的二进制数据。
2.2.1 将数据转换为“字节串”格式
使用struct模块中的pack()函数,可以将数据转换为“字节串”格式,该函数的用法如下所示。
其中,格式字符参数是一个字符,表示要转换数据的类型;第二个参数表示要转换的数据。
相关链接2 pack()函数格式字符含义如下表所示。
格式字符
对应的数据类型
‘i’
int,整型
‘I’
unsigned int,无符号整型
‘f’
float,单精度浮点数
‘d’
double,双精度浮点数
‘s’
char[],字符串
将整型1024转换为“字节串”格式的代码如图1所示。
图1 将整型1024转换为“字节串”格式的代码
注意1 需要导入struct模块。
2.2.2 将数据写入到二进制文件
将数据写入到二进制文件时,首先以二进制写入的方式打开二进制文件,之后将要写入的数据转换为“字节串”格式;接下来将转换后的“字节串”数据写入到二进制文件中;最后关闭文件。代码如图2所示。
图2 将数据写入到二进制文件
从图2中可以看出,第1行代码导入了struct模块;第2行代码使用open()函数创建/打开名为“1.dat”的二进制文件,open()函数的第二个参数’wb’表示写权限和二进制方式;第3-5行代码使用for循环将0-999这1000个整数转换为“字节串”数据,然后写入到“1.dat”中;最后第6行代码关闭文件。
从二进制文件中读取出来的数据是“字节串”格式的,因此在显示这些数据之前需要使用struct模块中的unpack()函数将“字节串”转换为其它类型。
2.3.1 将“字节串”转换为其它类型
struct模块中的unpack()函数的用法如下所示。
其中,unpack()函数的格式字符参数与pack()函数的格式字符含义相同;第二个参数是要转换的“字节串”;该函数的返回值是元组类型,元组中的数据是转换后的指定格式的数据。
2.3.2 从二进制文件中读取数据
从二进制文件中读取数据的代码如图3所示。
图3 从二进制文件中读取数据的代码
其中,第1行代码导入struck模块;第二行代码以二进制读取的方式打开“1.dat”二进制文件;第3行代码通过struct模块中的calcsize()函数获取整型数据对应的“字节串”格式的大小;第4行代码通过read()函数读取“1.dat”中的“一个数据”;第5-9行代码通过while循环逐个读取“1.dat”中的“字节串”数据,并通过unpack()函数将“字节串”数据转换为整型数据并打印出来;第10行代码关闭文件。以上代码运行的效果如图4所示。
注意2 第6行代码得到的value是包含了一个整型数据的元组,第7行代码的value是整型,其值为上述元组中的数据。
图4 代码运行效果
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/13284.html