1. 什么是.bin文件

扩展名为.bin的文件就是一个二进制文件(binary)。不同于文本文件,二进制文件用记事本、Notepad++等打开都是乱码。

像是这样:

但是.bin文件可以用WINHEX等软件打开。二进制文件里面存储的都是数据,只有按照某个预先设定的规则读出,才能明白这些数字的具体含义。

WINHEX将二进制文件内容转为十六进制的形式展现出来:

二进制文件相比于文本文件的优点:节约存储空间、读写速度快、有一定的加密保护作用。

关于二进制文件与文本文件,可以参考下这个博客程序员别唬我系列之:二进制文件

2. 二进制文件读写

2.1 读二进制文件

读二进制文件 “x.bin” 的内容,每次输出一个字节。

(1) 文件路径放在filepath中,这里将.bin文件与代码文件放在了同一个文件夹下,因此没有写绝对路径。

(2) open(filepath, 'rb'):以读的形式打开文件文件,注意使用 rb 来读二进制文件。

(3) 记得close: binfile.close()

import struct

import os

if __name__ == '__main__':

filepath='x.bin'

binfile = open(filepath, 'rb') #打开二进制文件

size = os.path.getsize(filepath) #获得文件大小

for i in range(size):

data = binfile.read(1) #每次输出一个字节

print(data)

binfile.close()

运行,输出结果:

如果想看到十进制的结果,可以使用python中的struct.unpack()方法:

struct.unpack('B', data):这里的参数B的含义是将C结构数据的unsigned char 类型转为python中的integer

这里得到的num是tuple类型,因此使用num[0]将数字取出。

for i in range(size):

data = binfile.read(1)

num = struct.unpack('B', data)

print(num[0])

输出结果为:

2.2 写二进制文件

(1) 假设要把数字123写入二进制文件,首先需要把数字int类型转为bytes类型。

data.to_bytes(1, 'big'):参数 ‘1’ :转为1个字节的bytes; 参数 'big’ :byteorder。

查看某个变量a的类型,可以利用type()

a=123

print('a:',type(a))

b=a.to_bytes(1,'big')

print('b:',type(b))

输出:

(2) open(filepath, 'ab+') :写模式打开二进制文件。

写入时注意:使用 ab+ 来完成追加写入,使用 wb来完成覆盖写入。

(3) 关闭binfile.close()

data=123

content= data.to_bytes(1, 'big')

filepath='123.bin'

binfile = open(filepath, 'ab+') #追加写入

binfile.write(content)

print('content',content)

binfile.close()

2.3 打开文件模式

列了下打开文件的不同模式,也就是open()里第二个参数。 带b的参数表示操作二进制文件,不带b的操作文本文件。

摘自Python文件读写(open(),close(),with open() as f…

模式

描述

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

numpy 保存数据

以3*4数组a为例:

方法1:

a.tofile("filename.bin")

这种方法只能保存为二进制文件,且不能保存当前数据的行列信息,文件后缀不一定非要是bin,也可以为txt,但不影响保存格式,都是二进制。

这种保存方法对数据读取有要求,需要手动指定读出来的数据的的dtype,如果指定的格式与保存时的不一致,则读出来的就是错误的数据。

b = numpy.fromfile("filename.bin",dtype = **)

读出来的数据是一维数组,需要利用

b.shape = 3,4重新指定维数。

方法2.

numpy.save("filename.npy",a)

利用这种方法,保存文件的后缀名字一定会被置为.npy,这种格式最好只用

numpy.load("filename")来读取。

方法3.

numpy.savetxt("filename.txt",a)

b = numpy.loadtxt("filename.txt")

用于处理一维和二维数组

pythonnumpy生成二进制流_Python 读写二进制文件 以及Numpy读写二进制文件相关推荐

  1. python 二进制流_Python中对字节流/二进制流的操作:struct模块简易使用教程

    前言 前段时间使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块.查了网上挺多教程都写的挺好的,不过对新手不是很友好,所以我重新整理了一 ...

  2. python requests post 二进制流_Python的requests如何同时post图片二进制流和json数据application/octet-stream...

    如何用post的方法以application/octet-stream的content-type提交json和文件呢,总是说文件类型错误 写入图片 该接口用于根据 spreadsheetToken 和 ...

  3. python图片转为二进制流_python将图片转为二进制-女性时尚流行美容健康娱乐mv-ida网...

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 mysql 5.7.9 lin ...

  4. python requests post 二进制流_Python requests 模块

    requests Python 的内置 urllib 模块,可以用于访问资源,但是,用起来比较麻烦. requests 是一个第三方库,在处理 URL 资源上面非常方便,这也是入门爬虫比较推荐的库之一 ...

  5. python读取二进制文件_python读取二进制流 Python二进制方式读写文件 - 电脑常识 - 服务器之家...

    python读取二进制流 Python二进制方式读写文件 发布时间:2017-03-18 来源:服务器之家 这两天用Python解析ELF二进制文件,遇到了不少问题,总结整理如下,以便加深对Pytho ...

  6. (P60)io流类库:文件读写,二进制文件的读写,文件随机读写tellp、tellg、seekp、seekg

    文章目录 1.文件读写 2.二进制文件的读写 3.文件随机读写tellp.tellg.seekp.seekg 1.文件读写 文本读写方式1:<<, >>, 文本读写方式2:ge ...

  7. python把文件读成字节流_Python中对字节流/二进制流的操作:struct

    前言 前段时间使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块.查了网上挺多教程都写的挺好的,不过对新手不是很友好,所以我重新整理了一 ...

  8. python把文件读成字节流_Python中struct模块对字节流/二进制流的操作教程

    前言 最近使用Python解析IDX文件格式的MNIST数据集,需要对二进制文件进行读取操作,其中我使用的是struct模块.查了网上挺多教程都写的挺好的,不过对新手不是很友好,所以我重新整理了一些笔 ...

  9. php+打开图片二进制文件,php图片文件、二进制流、base64格式相互转化

    1,php 图片文件.二进制流.base64格式相互转化$image = 'E:/www/logo.png';  //图片文件地址 $type = getimagesize($image)['mime ...

最新文章

  1. 苹果笔记本只有电源键能用的解决办法
  2. EasyUI——常见用法总结
  3. 神策数据携手绿城服务 筑就幸福绿城数据驱动
  4. 生活是没有什么阳光的
  5. Flutter进阶—质感设计之列表项
  6. java线程池需要shutdown吗_公用线程池要不要shutdown?
  7. 转 Git-fatal: unable to access 'xxx' : Could not resolve host: xxx
  8. 大型门户网站架构分析[转]
  9. 树莓派——使用SDK定期备份本地文件到OSS(自用)
  10. 推荐6款程序员开发编译工具
  11. 盘点开发者喜欢用的浏览器,最后这一款值得拥有
  12. 基于51单片机超声波红外避障语音导盲仪设计(全套资料)
  13. solidworks 显示设计库图标
  14. from scipy.misc import comb ImportError: cannot import name comb
  15. java osm pbf_OSM数据的下载和转换使用
  16. CentOS7安装 jq
  17. 网红直播营销现状及对策研究
  18. 3ds Max下载_3ds Max 2023上线了哪些新功能?
  19. “好奇号”的火星发展观
  20. 贝叶斯分析助你成为优秀的调参侠:自动化搜索物理模型的参数空间

热门文章

  1. Android network — DHCP协议详解
  2. 创造与魔法java语言_《创造与魔法》食谱大全
  3. 那些年我们写过的文案
  4. 复旦微电子fpga数据手册_专注FPGA图像加速领域 深维科技跨入发展快车道
  5. BackhaulRateDlWLAN 和BackhaulRateUlWLAN WLAN回程线路上行和下行带宽
  6. 数据分析(二)----- 描述性统计分析
  7. 光伏与光电子实验 实验二 电能质量的测量与孤岛效应
  8. 一款棋牌游戏app被成功开发需要具备这些特点
  9. 如何用ipad或者是iphone来无线投屏到电视机
  10. 开源移动护理_开源让您的健康护理倍感美好