python使用numpy按一定格式读取bin文件的实现(pythonfor循环偶数和减去奇数和)原创

随心笔谈2年前发布 admin
212 0 0

文章摘要

这篇文章介绍了如何使用Python的numpy库来按特定格式读取二进制文件。以下是简要总结: 1. **二进制文件的定义**:二进制文件存储数据为十六进制形式,如使用WINHEX或Notepad++打开。 2. **numpy.fromfile的功能**: - **读取二进制文件**:使用`numpy.fromfile`按指定格式读取文件中的数据。 - **参数说明**: - `dtype`:指定数据类型(如整数、浮点数等)。 - `count`:读取的数据数量。 - `offset`:从文件指定位置开始读取。 - `sep`:分隔符,用于文本文件。 - **示例代码**: ```python 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) ``` 3. **应用示例**: - 通过Notepad++读取十六进制文件,转换为字符串后用串口写入。改用numpy读取二进制文件,保持数据格式一致性,提高效率。 4. **资源推荐**: - 建议学习numpy关于二进制文件存储与读取的详细方法,增强实际应用能力。 总结:文章通过实例展示了如何高效使用numpy读取二进制文件,强调了指定数据格式的重要性,并提供了实用的代码示例。这对于理解和应用numpy处理二进制数据非常有帮助。



目录使用numpy按一定格式读取bin文件这里重点介绍fromfilepython读取bin文件并下发串口总结

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

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

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

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

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

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

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

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

numpy.fromfile(file,?dtype=float,?count=-1,?sep=”,?offset=0,?*,?like=None)?

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

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

# 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()

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

您可能感兴趣的文章:Python Numpy中数据的常用保存与读取方法对numpy中二进制格式的数据存储与读取方法详解Python使用Numpy模块读取文件并绘制图片

© 版权声明

相关文章