gpt4 book ai didi

python - 达到 EOF 和使用 Unpack 之间的冲突

转载 作者:太空宇宙 更新时间:2023-11-03 16:52:06 26 4
gpt4 key购买 nike

我的错误是解包需要长度为1的字符串参数,但脚本到达文件末尾时不会返回这样的参数。在将二进制数据转换为 int 数据时,如何仍然到达文件末尾而不弹出该错误?

ecgSS = []
ecgFB = []

try:
print("Beginning snipping of ECG data from the holter file...")

#Get size of file in bytes
file_size = os.path.getsize(args.filename)

#Read holter file into memory
holter = open(args.filename, 'rb')

ecgCount = 0
while ecgCount <= file_size:
packetID = struct.unpack('B', holter.read(1))[0]
packetSS = struct.unpack('H', holter.read(2))[0]
packetFB = struct.unpack('H', holter.read(2))[0]

if(packetID == 0):
ecgCount += 1
ecgSS.append(packetSS)
ecgFB.append(packetFB)

#Close the file stream
holter.close()

最佳答案

在读取之前,您必须确保文件有足够的数据。对于 while 循环的每次迭代,您将读取 5 个字节,因此您必须确保在读取之前至少有 5 个字节。此外,每次读取后计数必须增加 5。

一个简单的修复方法是将循环更改为

while ecgCount < file_size/5:

通过此修复,您还需要使用两个计数器。一项用于文件中的数据数量,一项用于文件中的有效数据。正如我所看到的,您似乎只考虑了 packetID==0 的数据,这是一种验证类型。您需要为该计数器配备一个不同的计数器。假设 validCount,您的程序将如下所示:

ecgSS = []
ecgFB = []

try:
print("Beginning snipping of ECG data from the holter file...")

#Get size of file in bytes
file_size = os.path.getsize(args.filename)

#Read holter file into memory
holter = open(args.filename, 'rb')

ecgCount = 0
validCount = 0
while ecgCount < file_size/5:
packetID = struct.unpack('B', holter.read(1))[0]
packetSS = struct.unpack('H', holter.read(2))[0]
packetFB = struct.unpack('H', holter.read(2))[0]

ecgCount += 1
if(packetID == 0):
validCount += 1
ecgSS.append(packetSS)
ecgFB.append(packetFB)

#Close the file stream
holter.close()

关于python - 达到 EOF 和使用 Unpack 之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35755305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com