python bin文件处理

发布时间:2019-08-31 09:47:05编辑:auto阅读(1784)

      1. 基础知识掌握

      bin文件: open函数创建file对象

      打开文件的不同模式:例子:open(“file.txt”,‘r’)

      模式  描述

      r  以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

      rb  以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

      r+  打开一个文件用于读写。文件指针将会放在文件的开头。

      rb+  以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

      w  打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

      wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

      w+  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

      wb+  以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

      a  打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

      ab  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

      a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

      ab+  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

      t  文本默认

      x  写模式,新建一个文件,如果该文件存在,则会报错。

      b  二进制模式

      +  打开一个文件进行更新(可读可写)。

      bin文件的python struct库 读写属性

      a = struct.pack('B',0x00)

      b = struct.unpack(‘B’,a)

      这块可以使用python编译的看一下哦!(你就明白了)

      1. struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,

      可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, ...),

      参数fmt是格式字符串,关于格式字符串的相关信息在下面有所介绍。v1, v2, ...表示要转换的python值。

      2. struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的

      函数原型为:struct.unpack(fmt, string),该函数返回一个元组

      Format  C Type  Python  字节数

      x  pad byte  no value  1

      c  char  string of length 1  1

      b  signed char  integer  1

      B  unsigned char  integer  1

      ?  _Bool  bool  1

      h  short  integer  2

      H  unsigned short  integer  2

      i  int  integer  4

      I  unsigned int  integer or long  4

      l  long  integer  4

      L  unsigned long  long  4

      q  long long  long  8

      Q  unsigned long long  long  8

      f  float  float  4

      d  double  float  8

      s  char[]  string  1

      p  char[]  string  1

      P  void *  long

      这快就类似于C语言中的字节对齐,大小端的选择

      例子:(后面有说明)

      a = struct.pack('

      b = struct.pack('>I',0x12345678) #四字节存入,按大端存储

      Character  Byte order  Size and alignment

      @  native  native 凑够4个字节

      =  native  standard 按原字节数

      <  little-endian  standard 按原字节数

      >  big-endian  standard 按原字节数

      !  network (= big-endian)  standard 按原字节数

      2. bin文件的打开和模式

      file = open(file_name,'wb')#二进制写模式

      file = open(file_name,'rb')#二进制读模式

      file = open(file_name,'ab')#二进制补充读写模式

      3. bin文件读取

      import struct

      import os

      def ReadFile():

      filepath='7.bin'

      binfile = open(filepath, 'rb') #打开二进制文件

      size = os.path.getsize(filepath) #获得文件大小

      for i in range(size):

      data = binfile.read(1) #每次输出一个字节

      print(data)

      binfile.close()

      if __name__ == '__main__':

      ReadFile()

      7.bin文件如下

      

    在这里插入图片描述


      4. bin文件写入

      import struct

      import os

      def WriteFile():

      filepath='7.bin'

      data = 123

      binfile = open(filepath, 'ab+') #打开二进制文件(追加完成)

      a = struct.pack('B',data)

      binfile.write(a)

      binfile.close()

      if __name__ == '__main__':

      WriteFile()

      7.bin文件

      

    在这里插入图片描述


      效果图

      

    在这里插入图片描述


      5. bin文件的大小端写入

      import struct

      file_name = "5.bin"

      def Big_little_endian():

      file = open(file_name,'wb')

      a = struct.pack('I',0x12345678) #四字节存入,正常状态

      b = struct.pack('

      c = struct.pack('>I',0x12345678) #四字节存入,按大端存储

      file.write(a)

      file.write(b)

      file.write(c)

      file.close()

      if __name__ == '__main__':

      Big_little_endian()

      6. bin文件的写0

      import struct

      bin_file_1 = "1.bin"

      def write0x00():

      file = open(bin_file_1,'wb')

      for i in range(1,0xFF):

      data = struct.pack('B',0x00) #写0

      file.write(data)

      file.close

      if __name__ == '__main__':

      write0x00()

      效果图:

      

    在这里插入图片描述


      7. bin文件的写1

      import struct

      bin_file_2 = "2.bin"

      def write0xFF():

      file = open(bin_file_2,'wb')

      for i in range(0,0xFF):

      data = struct.pack('B',0xFF) #写1

      file.write(data)

      file.close

      if __name__ == '__main__':

      write0x00()

      效果图: 无锡正规妇科医院 http://www.jlfukeyy.com/

      

    在这里插入图片描述


      8. bin文件的合并

      1.bin和2.bin合并成merage.bin

      import struct

      bin_file_1 = "1.bin"

      bin_file_2 = "2.bin"

      bin_file_merage = "merage.bin"

      def merage_bin():

      file_merage = open(bin_file_merage,'wb')

      file_1 = open(bin_file_1,'rb')

      data = file_1.read()

      file_merage.write(data)

      file_2 = open(bin_file_2,'rb')

      data = file_2.read()

      file_merage.write(data)

      file_1.close()

      file_2.close()

      file_merage.close()

      if __name__ == '__main__':

      merage_bin()

      效果图:

      

    在这里插入图片描述


      9. bin文件写入字符串

      import struct

      import string

      bin_file_1 = "7.bin"

      enter = memoryview(b"STARTX") #返回值是元组

      def writeString():

      file = open(bin_file_1,'wb')

      for i in enter:

      data = struct.pack('B',i)

      file.write(data)

      file.close

      if __name__ == '__main__':

      writeString()

      效果图:

      

    在这里插入图片描述


关键字