python使用numpy按一定格式读取bin文件的实现

 更新时间:2023年05月10日 10:04:50   作者:drunk_snail  
这篇文章主要介绍了python使用numpy按一定格式读取bin文件的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用numpy按一定格式读取bin文件

python环境下,如何使用numpy像matlab一样按一定格式读取bin文件?

bin文件就是将数据按16进制形式存储的二进制文件(binary),可以使用WINHEX、Notepad++(需安装插件)等以16进制形式打开,如图用notepad++打开。

由于使用python中的read()读取二进制文件时是以字符串形式读取,且每次只能读取一个字节,十分不方便。

偶然发现可以使用numpy中的fromfile按指定格式对bin文件进行读写,方便了许多。

NumPy提供了多种存取数组内容的文件操作函数。

保存数组数据的文件可以是二进制格式或者文本格式。

二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型。

  • tofile()将数组中的数据以二进制格式写进文件
  • tofile()输出的数据不保存数组形状和元素类型等信息
  • fromfile()函数读回数据时需要用户指定元素类型,并对数组的形状进行适当的修改

这里重点介绍fromfile

numpy.fromfile(file, dtype=float, count=-1, sep='', offset=0, *, like=None) 
  • file是待读取内容,可以是文件、路径、字符串
  • dtype返回数组的数据类型。对于二进制文件,它用于确定文件中项目的大小和字节顺序。支持大多数内置数字类型,也支持扩展类型。1.18.0开始支持复数格式
  • count:要读取的项目数量(不一定以字节为单位),count = -1表示读取所有项目(即完整文件)
  • sep:项目之间的分隔符(如果文件是文本文件)。空(“”)分隔符表示文件应被视为二进制文件。分隔符中的空格(“”)与零个或多个空格字符匹配。仅由空格组成的分隔符必须至少匹配一个空格
  • offset:距文件当前位置的偏移量(以字节为单位)。默认为0。仅允许用于二进制文件。可以和count搭配用于读取指定位置和长度的内容
  • like:引用对象以允许创建非NumPy数组的数组,如果传入一个像like一样支持   __array_function__ 协议的数组形式,结果将由它来定义。在这种情况下,它确保创建与通过此参数传入的对象兼容的数组对象。 
import numpy as np
a = np.arange(24)
b = np.fromfile("F:/a.bin", dtype=np.int32, count=5, offset=8)
print(a, '\n', b)

由上图可以看出,数据是以32位的十六进制数形式存储,也就是一个数占4个字节。(tofile写入数据的顺序为 ‘C’ order)。

此时,若设置count=5, offset=8,也就是从0开始偏移8个字节,读取5个数

结果如图:

image

python读取bin文件并下发串口

# coding:utf-8
import time, serial
from struct import *
import binascii
file = open('E:\\1.bin', 'rb')
i = 0
while 1:
    c = file.read(1)
    # 将字节转换成16进制;
    ssss = str(binascii.b2a_hex(c))[2:-1]
    print(str(binascii.b2a_hex(c))[2:-1])
    if not c:
        break
    ser = serial.Serial('COM3', 57600, timeout=1)
    ser.write(bytes().fromhex(ssss))# 将16进制转换为字节
    if i % 16 == 0:
        time.sleep(0.001)
    #写每一行等待的时间
    i += 1
    ser.close()
file.close()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • wxPython窗口的继承机制实例分析

    wxPython窗口的继承机制实例分析

    这篇文章主要介绍了wxPython窗口的继承机制,较为详细的讲述了wxPython窗口的继承机制及相关用法,并对其中的易错点进行了简单的分析,需要的朋友可以参考下
    2014-09-09
  • Python 十大特性

    Python 十大特性

    这篇文章主要给大家分享的是Python十大特性,Python 编程语言是世界上发展最快的编程语言。这一高级通用编程语言提供了广泛的实际应用,并且是一种非常流行的认证,下面我们就来看看它都有哪些特性吧
    2022-01-01
  • python在一个范围内取随机数的简单实例

    python在一个范围内取随机数的简单实例

    在本篇内容里小编给大家分享了关于python在一个范围内取随机数的简单实例内容,有需要的朋友们可以学习下。
    2020-08-08
  • python asyncio 协程库的使用

    python asyncio 协程库的使用

    这篇文章主要介绍了python asyncio 协程库的使用,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • Python如何实现SSH远程连接与文件传输

    Python如何实现SSH远程连接与文件传输

    这篇文章主要介绍了Python如何实现SSH远程连接与文件传输问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 通俗的讲解深度学习中CUDA,cudatookit,cudnn和pytorch的关系

    通俗的讲解深度学习中CUDA,cudatookit,cudnn和pytorch的关系

    有些刚入行的朋友总是搞不清楚CUDA,cudatookit,cudnn和pytorch的关系,那么今天这篇文章用通俗易懂的话讲解了他们之间的关系,需要的朋友可以参考下,相信会对你有所帮助
    2023-03-03
  • Python用Bottle轻量级框架进行Web开发

    Python用Bottle轻量级框架进行Web开发

    这篇文章主要介绍了Python用Bottle轻量级框架进行Web开发的相关资料,需要的朋友可以参考下
    2016-06-06
  • 使用python 3实现发送邮件功能

    使用python 3实现发送邮件功能

    本文通过实例代码给大家介绍了使用python 3实现发送邮件功能,代码简单易懂非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • python如何在列表、字典中筛选数据

    python如何在列表、字典中筛选数据

    这篇文章主要为大家详细介绍了python如何在列表、字典中筛选数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • 彻底理解Python list切片原理

    彻底理解Python list切片原理

    本篇文章主要介绍了Python list切片原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论