使用numpy.save(和savez)发生意外类型错误

时间:2019-01-17 09:21:51

标签: python python-3.x numpy io

我正在尝试使用numpy的savezload方法来(惊奇)保存和加载numpy数组,这些数组足够大,以至于我以前使用的方法(另存为JSON)非常慢。

我重现了以下代码片段中遇到的问题:

import numpy

test_path = "test.npy"
test_data = numpy.random.rand(100000)

with open(test_path, 'w') as test_file:
    numpy.save(test_file, test_data)

运行时,出现以下错误:

TypeError: write() argument must be str, not bytes

我已经能够解决此问题,而不必直接通过字符串传递numpy.save路径:

numpy.save(test_path, test_data)

但是,根据我对文档的阅读,我发现此错误很奇怪,numpy.save应该直接接受一个类似文件的打开对象。我想念什么吗?

2 个答案:

答案 0 :(得分:0)

您正在打开文件,然后将其保存到打开的文件中,numpy.save不需要指向已打开文件的文件指针,而是指向文件的路径,因此代码应为:

numpy.save(test_path, test_data)

答案 1 :(得分:0)

尝试:

with open(test_path, 'wb+') as test_file:
    numpy.save(test_file, test_data)

由于.npy是二进制文件,因此您必须将数据作为字节而不是字符串进行传递。