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

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

在编程中,我们经常需要将数据以二进制的形式存储到文件中,或者从文件中读取二进制数据。二进制数据以字节(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'表示字符串,后跟一个表示字符串长度的数字)来解包和打包数据。


目录
相关文章
|
编译器 开发工具 C++
Qt5.6.3+VS2013环境搭建教程(最后支持XP系统的Qt版本)
Qt5.6.3+VS2013环境搭建教程(最后支持XP系统的Qt版本)
2318 0
Qt5.6.3+VS2013环境搭建教程(最后支持XP系统的Qt版本)
|
网络安全 数据中心
百度搜索:蓝易云【Proxmox软件防火墙的配置教程】
现在,你已经完成了Proxmox软件防火墙的配置。请确保你的防火墙规则设置正确,以保护你的Proxmox VE环境免受未经授权的访问和网络攻击。
412 5
mac zsh: command not found: pip解决方法
mac zsh: command not found: pip解决方法
1433 0
|
8月前
|
iOS开发
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
272 9
Cisco Catalyst 9800 Wireless Controller, IOS XE Release 17.17.1 ED - 思科无线控制器系统软件
|
9月前
|
人工智能 搜索推荐
「社会实验室」成真!SocioVerse:复旦联合小红书开源社会模拟世界模型,用AI预演群体行为
SocioVerse是由复旦大学联合小红书等机构开源的社会模拟框架,基于大语言模型和千万级真实用户数据构建,能精准模拟群体行为并预测社会事件演化趋势。
678 2
「社会实验室」成真!SocioVerse:复旦联合小红书开源社会模拟世界模型,用AI预演群体行为
|
6月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
1287 0
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
1671 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
网络安全 API Apache
将Apache服务与内网穿透结合,让您的网站可以公网访问
将Apache服务与内网穿透结合,让您的网站可以公网访问
|
关系型数据库 MySQL Linux
Docker中运行一个mysql
尽管不希望在docker中运行mysql,但是自己玩确实方便~~~
4838 2
Docker中运行一个mysql
|
关系型数据库 MySQL 数据库
idea如何连接数据库
idea如何连接数据库

热门文章

最新文章