使用二进制方式向文件读写一组数据

简介: 使用二进制方式向文件读写一组数据

在编程中,我们经常需要将数据以二进制的形式存储到文件中,或者从文件中读取二进制数据。二进制数据以字节(byte)为单位进行存储,这种方式在处理非文本数据(如图片、音频、视频等)或者需要精确控制数据格式的情况下非常有用。

以下是一个简单的示例,演示了如何使用Python编程语言以二进制方式向文件写入一组数据,并从文件中读取这些数据。

写入二进制数据

首先,我们需要创建一个文件,并以二进制模式('wb')打开它。然后,我们可以使用write()方法将二进制数据写入文件。在Python中,字节数据通常使用bytes类型表示。

python复制代码

  # 假设我们有一组整数数据,我们想要以二进制形式存储它们 
  data = [10, 20, 30, 40, 50] 
  
  # 打开文件以二进制写入模式 
  with open('binary_data.bin', 'wb') as file: 
  # 遍历数据列表,并将每个整数转换为字节(这里使用4字节整数) 
  for num in data: 
  # 使用struct模块将整数转换为固定长度的字节(例如,'i'表示4字节整数) 
  # 注意:这里为了简单起见,我们假设所有整数都是32位的 
  import struct 
  packed_data = struct.pack('i', num) 
  # 将字节数据写入文件 
  file.write(packed_data)

读取二进制数据

接下来,我们可以使用类似的方法以二进制模式('rb')打开文件,并使用read()方法读取二进制数据。然后,我们可以使用struct.unpack()方法将字节数据转换回原始的数据类型。

python复制代码

  # 打开文件以二进制读取模式 
  with open('binary_data.bin', 'rb') as file: 
  # 读取文件中的所有数据 
  all_data = file.read() 
  
  # 初始化一个空列表来存储读取的数据 
  unpacked_data = [] 
  
  # 使用一个循环来遍历文件中的字节数据,并逐个解包整数 
  # 注意:我们需要知道每个整数在文件中占用的字节数(在这个例子中是4字节) 
  while all_data: 
  # 使用struct模块解包4字节整数 
  unpacked_num, all_data = struct.unpack_from('i', all_data) 
  # 将解包后的整数添加到列表中 
  unpacked_data.append(unpacked_num) 
  
  # 如果还有剩余数据,但不足以构成一个整数,则抛出异常 
  if len(all_data) < 4: 
  raise ValueError("Not enough data to unpack an integer") 
  
  # 打印读取的数据 
  print(unpacked_data) # 输出: [10, 20, 30, 40, 50]

注意:在实际应用中,你可能需要处理不同大小的数据项,或者数据项之间可能有不同的分隔符。因此,你可能需要根据你的具体需求调整上述代码。此外,如果你正在处理非整数数据(如浮点数、字符串等),你可能需要使用不同的格式字符串(如'f'表示浮点数,'s'表示字符串,后跟一个表示字符串长度的数字)来解包和打包数据。


目录
相关文章
|
网络安全 数据中心
百度搜索:蓝易云【Proxmox软件防火墙的配置教程】
现在,你已经完成了Proxmox软件防火墙的配置。请确保你的防火墙规则设置正确,以保护你的Proxmox VE环境免受未经授权的访问和网络攻击。
404 5
mac zsh: command not found: pip解决方法
mac zsh: command not found: pip解决方法
1396 0
|
5月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
1174 0
|
网络安全 API Apache
将Apache服务与内网穿透结合,让您的网站可以公网访问
将Apache服务与内网穿透结合,让您的网站可以公网访问
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
1630 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
关系型数据库 MySQL Linux
Docker中运行一个mysql
尽管不希望在docker中运行mysql,但是自己玩确实方便~~~
4798 2
Docker中运行一个mysql
|
关系型数据库 MySQL 数据库
idea如何连接数据库
idea如何连接数据库
|
SQL 物联网 数据处理
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
|
存储 异构计算
FPGA - 7系列 FPGA内部结构之CLB -01- CLB资源概述
本文节选UG474进行整理翻译,用于对CLB进行简单介绍,同时简单介绍了下针对逻辑资源设计的推荐流程。
814 0
FPGA - 7系列 FPGA内部结构之CLB -01- CLB资源概述
|
安全 NoSQL Java
基于springboot+Redis的前后端分离项目(三)-【黑马点评】
当用户抢购时,就会生成订单并保存到tb_voucher_order这张表中,而订单表如果使用数据库自增ID就存在一些问题:id的规律性太明显,受单表数据量的限制。场景分析:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。场景分析二:随着我们商城规模越来越大,mysql的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。