使用“struct.pack”将数据写入文件时出错

Posted

技术标签:

【中文标题】使用“struct.pack”将数据写入文件时出错【英文标题】:Error in using `struct.pack` for writing data to file 【发布时间】:2015-10-25 18:20:25 【问题描述】:

我有一个 numpy.ndarray 的数字样本,每个数字都在 1 和 2**20 之间。

我想把它写成一个二进制文件,这样每个元素都用四个字节表示。

但是,生成的文件大小不同于样本大小的 4 倍。

这是我正在使用的代码:

        outputFile = open('testDS', 'w')
        print len(sample)
        if (outputFile is not None):
            for s in sample:
                assert(s < 2**20)
                r = struct.pack("i", s)
                assert(len(r) == 4)
                outputFile.write(r)
        outputFile.close()

我得到的输出(样本大小)是: 1000

但是,生成的文件大小为 4026 字节。

知道为什么文件大小不完全是 4000 字节吗?

【问题讨论】:

【参考方案1】:

以二进制模式打开文件:

outputFile = open('testDS', 'wb')

否则,文件对象可能会对出现在二进制数据中的换行符进行一些神奇的转换,从而导致将其他字符写入文件。例如,请参阅https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

【讨论】:

以上是关于使用“struct.pack”将数据写入文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

struct.pack引发“struct.error:required参数不是整数”

python struct.pack() 二进制文件,文件中打包二进制数据的存储与解析

在python中重写wav文件的问题

qt中如何解包利用python 的struct.pack()函数打包的数据

python 将列表写到二进制文件中

Arduino 和 Python (3.x) 之间的 Serial.read() 和 Struct.pack / 串行通信问题