专栏首页python3python bin文件处理

python bin文件处理

  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()

  效果图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 爬虫 (十) 学习 python 基础知识点的正确姿势 (三)

    我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前...

    公众号---志学Python
  • 爬虫 (八) 学习 python 基础知识点的正确姿势 (一)

    我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前...

    公众号---志学Python
  • 目标检测算法之SSD的数据增强策略

    这篇文章是对前面《目标检测算法之SSD代码解析》,推文地址如下:点这里的补充。主要介绍SSD的数据增强策略,把这篇文章和代码解析的文章放在一起学最好不过啦。本节...

    BBuf
  • 性能工具之Jmeter脚本python启动

    使用python执行Jmeter脚本需要与Jmeter脚本有约定,这样才能通过python脚本去执行咱们的Jmeter测试脚本。

    高楼Zee
  • 爬虫 (十一) 学习 python 基础知识点的正确姿势 (四)

    我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前...

    公众号---志学Python
  • python中的yield

    上一篇一番简单介绍了下scrapy工具的使用,深入时一番发现,yield这个关键字在很多scrapy的例子和教程里用的特别多。所以今天我们来研究下yield到底...

    efonfighting
  • Python - 基础知识

    在代码世界中,赋值符号=(一个等号)不是左边等于右边的意思。仅仅表示赋值动作:把右边的内容放到了左边的盒子中。

    xing.org1^
  • 使用自己的数据集训练MobileNet、ResNet实现图像分类(TensorFlow)| CSDN博文精选

    之前写了一篇博客《使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)》https://panjinq...

    AI科技大本营
  • 简单使用了下scrapy爬虫工具

    前天一番写了《用爬虫看看我们工作的”前途“》,里面收集了52job上在深圳的”前端“和”区块链“两个关键字的职位信息。

    efonfighting
  • 性能工具之Jmeter关联小白学习

    简单的说:每次请求服务器,服务器会给客户端发送一个动态值,但服务器会每次校验客户端是否携带该值并做对比,如果每次请求携带值与发送的值是正确就放行,如...

    高楼Zee

扫码关注云+社区

领取腾讯云代金券