【问题标题】:unpack requires a bytes object of length 32unpack 需要一个长度为 32 的字节对象
【发布时间】:2018-12-15 11:56:13
【问题描述】:

我需要打包数据并导出到 csv 文件,以及读取该 csv 文件并解码数据。

这是我打包数据的代码

from struct import *

raw_data = [[76.94,76.944,76.945],[76.97,76.979,76.980],[77.025,77.025,77.025]]
for data in raw_data:
    binary_format = pack('fff',raw_data[0][0],raw_data[0][1],raw_data[0][2])
    print(binary_format)
    list_data = [binary_format]

    with open('samples.csv','a') as csvFile:
        writer=csv.writer(csvFile,delimiter=',',quoting=csv.QUOTE_MINIMAL)
        writer.writerows(list_data)                                                  
        csvFile.close()

这是用于解码数据。

import csv
from struct import *

formater = 'fff'
with open('samples.csv', 'rb') as csvFile:
    reader = csv.reader(csvFile)
    for row in reader:
        print(unpack(formater,row[0].encode('UTF-8')))
csvFile.close()

以下错误是

struct.error: unpack 需要一个长度为 32 的字节对象

这样的异常输出

76.94,76.944,76.945
76.97,76.979,76.980
77.025,77.025,77.025

【问题讨论】:

  • unpack 用于解析二进制数据。你有一个常规的 CSV - 文本 - 文件,以空格作为分隔符。
  • 抱歉忘记删除多余的空间
  • 我已经更新了问题
  • @muthu 为什么要写成二进制?
  • 内存使用问题是一个原因

标签: python-3.x csv


【解决方案1】:

以下是打包/解包工作原理的一个小示例。

x = pack("ddd", 22, 33, 44)

x 在这种情况下是b'\x00\x00\x00\x00\x00\x006@\x00\x00\x00\x00\x00\x80@@\x00\x00\x00\x00\x00\x00F@'

unpack(x) 产生(22.0, 33.0, 44.0)

您从 CSV 检索的数据是十六进制的吗?

【讨论】:

  • @muthu 如果是,你能把我的答案标记为正确的吗?
  • @muthu 好的,有什么问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2021-10-06
  • 2016-05-07
相关资源
最近更新 更多