二进制文件的Python写入与读取

news2024/12/24 2:58:07
  • 二进制文件的Python编写
    • 这么基础的东西,必然用内置的就好

二进制文件的Python读写

重要提示

  • p.s. 1
>>> b'Hello World'.decode() == "Hello World"
True
>>> 

example

import struct
with open('binary_file.bin', 'wb') as file:
    data = b'\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64'  # 二进制数据
    number = 42
    packed_data = struct.pack('I', number)
    file.write(data)
    file.write(packed_data)
file.close()

with open('binary_file.bin', 'rb') as file:
    data = file.read(len(data))
    packed_data = file.read()
    number = struct.unpack('I', packed_data)[0]
    print(data.decode()) 
    print(number) 
file.close()
    


Hello World
42
>>> 

文件打开函数

打开模式参数

  • 'r':以只读模式打开文件。
    • 文件指针将位于文件的开头。如果文件不存在,将引发 FileNotFoundError。
  • 'w':以写入模式打开文件。
    • 如果文件已存在,则其内容将被截断为空。
    • 如果文件不存在,则创建新文件。
  • 'x':以排他性创建模式打开文件。
    • 如果文件已存在,则会引发 FileExistsError。
    • 如果文件不存在,则创建新文件。
  • 'a':以追加模式打开文件。
    • 文件指针将位于文件的末尾。
    • 如果文件不存在,则创建新文件。
  • 'b':以二进制模式打开文件,例如 'rb' 或 'wb'。
  • 't':以文本模式打开文件。
    • 这是默认模式,适用于处理文本文件。可以与其他模式一起使用,例如 'rt' 或 'wt'

文件读取函数

read()

  • 接受一个可选的参数,用于指定要读取的字节数
    • 默认值为 -1,表示读取整个文件
    • 上 example 已经可以清楚得说明了
  • 在UTF-8编码中,一个字节可以表示一个ASCII字符

文件写入函数

write()

  • 要写入文件的字节数据
  • 在二进制模式下,数据以字节的形式写入文件,而不会进行任何字符编码或解码
string = "Hello, World!"
byte_string = b"Hello, World!"

print(type(string))  
print(type(byte_string))  
<class 'str'>
<class 'bytes'>
>>> 
  • 要将数字写入二进制文件,需要将其转换为字节数据
    • 确保你选择的字节数 Bytes 能够容纳整数 number 的范围

example 02 

number = 1200
Bytes = 4
byte_data = number.to_bytes(Bytes, 'big')
with open('binary_file.bin', 'wb') as file:
    file.write(byte_data)
with open('binary_file.bin', 'rb') as file:
    Number = file.read()
    NUMBER = int.from_bytes(Number, 'big')
    print(NUMBER)

 

  •  最大值为 (2**(8*Bytes-1))-1 
    • Bytes = 4,4294967295
  • Traceback (most recent call last):
    File "C:\Users\LX\Desktop\00.py", line 3, in <module>
        byte_data = number.to_bytes(Bytes, 'big')
    OverflowError: int too big to convert

seek()

  • 在二进制文件中移动文件指针的位置
text_data = "Hello, World!"
number = 12345

with open('binary_file.bin', 'wb') as file:
    file.write(text_data.encode())
    file.seek(20)
    byte_data = number.to_bytes(4, 'big')
    file.write(byte_data)

with open('binary_file.bin', 'rb') as file:
    text = file.read(10)
    print(text.decode())
    file.seek(20)
    data = file.read()
    print(int.from_bytes(data, 'big'))

tell()

  • 函数可以获取当前文件指针的位置
  • example
text_data = "Hello, World!"
number = 12345

with open('binary_file.bin', 'wb') as file:
    file.write(text_data.encode())
    position = file.tell()
    byte_data = number.to_bytes(4, 'big')
    file.write(byte_data)

with open('binary_file.bin', 'rb') as file:
    text = file.read(10)
    print(text.decode())
    file.seek(20)
    data = file.read()
    print(int.from_bytes(data, 'big'))

文件格式

  • 二进制文件:二进制文件是以字节为单位存储数据的文件。它们通常用于存储非文本数据,如图像、音频、视频等。
  • 文本文件:文本文件是以字符形式存储数据的文件。它们通常用于存储文本数据,如普通文本文件、配置文件等。
  • CSV文件:CSV(逗号分隔值)文件是一种常见的用途是存储表格数据的格式。它们使用逗号或其他分隔符来分隔不同的字段,并可以使用纯文本编辑器进行编辑。
  • JSON文件:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于存储和传输结构化数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/758553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为机试】HJ17 坐标移动详解+完整源代码示例

忙碌了一周&#xff0c;一直没时间更新&#xff0c;趁着周末来更新第二个题目。 题目 题目解析 这个题目相比于上一个题目来说&#xff0c;会简单一些&#xff0c;不涉及到那些复杂的算法&#xff0c;就是对于字符串的处理。 算法步骤 输入一个字符串根据分号&#xff0c;将…

uniapp 集成七牛云,上传图片

1 创建项目 我是可视化创建项目的 &#xff0c;cli创建的项目可以直接使用npm安装七牛云。 2 拷贝qiniuUploader.js到项目&#xff0c;下面的回复 放了qiniuUploader.js百度云链接。 3 在需要使用qiniuUploader的vue文件 引入。 4 相册选择照片&#xff0c;或者拍照后&#xff…

Redis-持久化、主从集群、哨兵模式、分片集群、分布式缓存

文章目录 高级篇 - 分布式缓存 Redis集群0、单节点Redis的问题一、Redis持久化1.1 RDB 持久化1.1.1 基本介绍1.1.2 RDB的fork原理1.2.3 总结 1.2 AOF持久化1.3 RDB与AOF对比 二、Redis主从集群2.1 介绍2.2 搭建主从集群2.2.1 准备实例、配置2.2.2 启动2.2.3 开启主从关系2.2.4 …

快速而简单的视频格式转换方法

在数字时代&#xff0c;我们经常需要将视频文件从一种格式转换为另一种格式。无论是因为兼容性问题&#xff0c;还是为了在特定设备上播放视频&#xff0c;视频格式转换是一项非常常见的任务。本文将介绍视频格式转换的基本知识和步骤。 首先&#xff0c;了解不同的视频格式非常…

8.3 非正弦波发生电路

在实用电路中除了常见的正弦波外&#xff0c;还有矩形波、三角波、锯齿波、尖顶波和阶梯波&#xff0c;如图8.3.1所示。 一、矩形波发生电路 矩形波发生电路是其它非正弦波发生电路的基础&#xff0c;例如&#xff0c;若方波电压加在积分运算电路的输入端&#xff0c;则输出就…

数学建模-相关系数

excel基本操作&#xff1a;ctrl右&#xff0c;ctrl左&#xff0c;ctrlshift下/右&#xff0c;ctrlshift空格 题目里有数据&#xff0c;给出描述性统计是比较好的习惯 excel描述性统计&#xff1a;数据-数据分析-描述统计 MATLAB要做散点图C62个 SPSS可以直接画出两两之间的散…

华为OD机试真题 Java 实现【最小循环子数组】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、备注五、Java算法源码六、效果展示1、输入2、输出 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有…

koa初体验———swagger使用

学习完koa框架和mysql&#xff0c;写了一个小demo&#xff0c;选课管理系统&#xff0c;其中包含权限验证&#xff0c;登录注册&#xff0c;用户管理和选课管理。写这个项目目的一方面是为了自己练手&#xff0c;另一方面是为了我们在学习新技术的时候能够有接口供我们使用去测…

Cilium基础架构

Cilium作为一款Kubernetes CNI插件&#xff0c;从一开始就是为大规模和高度动态的容器环境而设计&#xff0c;并且带来了API级别感知的网络安全管理功能&#xff0c;通过使用基于Linux内核特性的新技术——BPF&#xff0c;提供了基于service/pod/container作为标识&#xff0c;…

树莓派-家庭健康监测-空气篇

树莓派-家庭健康监测-空气篇 最后编辑日期: 2023.7.16 1、背景和目标 室内空气中高浓度的二氧化碳会损害人类的认知能力和健康&#xff0c;良好室内空气质量的重要性和价值不言而喻。家庭健康监测-空气篇应运而生。 最后效果总览: 细节: 手机预览: 实现功能: 二氧化碳…

Redis数据类型的常用命令和应用场景

1. Redis数据类型概述 Redis 常见的数据类型有10 种&#xff0c;其中包括 5 种基本数据类型&#xff1a;Strings(字符串)、Lists(列表)、Sets(集合)、Hashes(散列)、Sorted sets(Zset有序集合)。除了基本数据类型外&#xff0c;还有 5 种常用数据类型&#xff1a;Bitmaps 、Hy…

《二叉搜索树OJ》

文章目录 1、 [根据二叉树创建字符串](https://leetcode.cn/problems/construct-string-from-binary-tree/)2、 [二叉树的层序遍历](https://leetcode.cn/problems/binary-tree-level-order-traversal/)3、 [二叉树的层序遍历 II](https://leetcode.cn/problems/binary-tree-le…

5.3 Python高级特性之-列表生成式、生成器、迭代器

一、 列表生成式 是Python内置的非常简单却强大的可以用来创建list的生成式 具体可根据如下案例理解&#xff0c;且代码也是可用的""" 1、 生成[0,1,2,3,4,5,6]这样列表 """ print(list(range(0, 7))) """ 2、 生成[0&#xff0…

MyBatis入门案列

MyBatis入门案列 开发Mybatis程序的步骤&#xff1a; 1、配置mybatis conf.xml: 配置数据库信息 和 需要加载的映射文件 &#xff12;、表 - 类 映射文件xxMapper.xml: 增删改查标签<select> &#xff13;、测试类: session.selectOne(“需要查询的SQL的namespace.id”…

jenkins 采用ssh方式连接gitlab连接不上

一、gitlab 添加jenkins服务器的公钥 jenkins 生成秘钥命令 ssh-keygen -t rsa2.jenkins 秘钥地址&#xff1a; cd /root/.ssh3.复制公钥 到gitlab 添加 cat id_rsa_pub4.添加私钥到jenkins cat id_rsa5.绑定&#xff08;顺利的话到这里就结束了&#xff09; &#xff0…

oc基本控件2

// // ViewController.m // OcDemoTest // // Created by Mac on 2023/7/14. //#import "ViewController.h"interface ViewController () // label property (weak, nonatomic) IBOutlet UIImageView *imageView; // Use of undeclared identifier // 全局propert…

基于Open3D的点云处理11-三维点云表面重建

点云表面重建 &#xff08;1&#xff09;显式建模方法&#xff1a; Explicit reconstruction 例如&#xff1a;Delaunay 三角网、Alpha shapes &#xff08;2&#xff09;隐式建模方法&#xff1a; Implicit reconstruction 例如&#xff1a;径向基函数法、移动最小二乘法、泊…

【QT】——Base64加解密

介绍 用 记事本 打开 exe、jpg、pdf 这些文件时&#xff0c;我们都会看到一大堆乱码&#xff0c;因为二进制文件包含很多无法显示和打印的字符。如果要让记事本这样的文本处理软件 能 处理二进制数据&#xff0c;如使用 json 保存二进制信息&#xff0c;需要先把数据先做一个 …

微服务 云原生:搭建 K8S 集群

为节约时间和成本&#xff0c;仅供学习使用&#xff0c;直接在两台虚拟机上模拟 K8S 集群搭建 踩坑之旅 系统环境&#xff1a;CentOS-7-x86_64-Minimal-2009 镜像&#xff0c;为方便起见&#xff0c;直接在 root 账户下操作&#xff0c;现实情况最好不要这样做。 基础准备 关…

数据在内存中的存储1(C语言进阶)

数据在内存中的存储 1.数据类型介绍1.1类型的基本归类&#xff1a;整形家族浮点数家族构造类型指针类型空类型 2.整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍为什么有大端和小端&#xff1a; 我们今天来学习数据在内存中的存储 1.数据类型介绍 前面我们已经学习了基…