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

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

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


目录
相关文章
|
6月前
|
存储 C语言 数据格式
用二进制方式向文件读写一组数据
用二进制方式向文件读写一组数据
57 1
|
6月前
|
存储 C语言
用二进制方式向文本读写数据
用二进制方式向文本读写数据
37 3
|
6月前
|
前端开发 API
18_管道——转换
18_管道——转换
37 0
|
存储 缓存 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(下)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(下)
|
11月前
|
C++
C++文件的随机读写与特定格式输入输出
C++文件的随机读写与特定格式输入输出
68 0
|
机器学习/深度学习 存储 C语言
二进制优化的快读模板,以及常用的读入形式。
二进制优化的快读模板,以及常用的读入形式。
62 0
|
存储 iOS开发 C++
C++之I/0流操作(标准流、文件流、二进制操作等)
C++之I/0流操作(标准流、文件流、二进制操作等)
164 0
|
存储 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(中)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(中)
|
编译器 数据库 C语言
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(上)
【C语言进阶】文件的顺序读写、随机读写、文本文件和二进制文件、文件读取结束的判定以及文件缓冲区相关知识(上)
|
存储 数据库 Windows
【C/进阶】如何对文件进行读写(含二进制)操作
【C/进阶】如何对文件进行读写(含二进制)操作