python将list类型的数据保存成一个文件及加载.npz文件后再转换为list类型的数据

保存列表

list_data为一个由多个数组或多个列表或多个数组和列表组成的列表,将其保存为npz文件的方式:

import numpy as np
np.savez('list_data',list_data)

当前路径下会生成一个list_data.npz的文件。

读取列表

将由多个数组或多个列表或多个数组和列表组成的.npz文件读取并恢复的方式:

import numpy as np
list_in = np.load('list_data.npz')  
print(list_in.files) # 查看各个数组名称 
arr_0 = list_in['arr_0']#object 只读

打印结果:

['arr_0']

接着执行:

arr_0 = list_in['arr_0']#object 只读

这是会发现报错:

ValueError: Object arrays cannot be loaded when allow_pickle=False

需要使用如下命令执行:

import numpy as np
list_in = np.load('list_data.npz',allow_pickle=True)
print(list_in.files) # 查看各个数组名称 
arr_0 = list_in['arr_0']#object 只读 

利用如下方式即可将list恢复成原来的类型:

list_o= []
for i in arr_0:
    list_o.append(i)

完整代码如下:

def npz2list(path):
    #保存列表
    #numpy.savez('list1',list_in)
    list1 = np.load(path,allow_pickle=True)  
    #print(list1.files) # 查看各个数组名称 
    arr_0 = list1['arr_0']#object 只读
    list_o= []
    for i in arr_0:
        list_o.append(i)
    return list_o
    #注意:若使用如下方式加载npz文件会报错:
    #list1 = np.load("test_out/list1.npz")
    #arr_0 = list1['arr_0']
    #报错信息 
    #ValueError: Object arrays cannot be loaded when allow_pickle=False

参考:Python教程:NumPy IO
numpy.savez() 函数将多个数组保存到以 npz 为扩展名的文件中。

numpy.savez(file, *args, **kwds)

参数说明:

  • file:要保存的文件,扩展名为 .npz,如果文件路径末尾没有扩展名 .npz,该扩展名会被自动加上
  • args: 要保存的数组,可以使用关键字参数为数组起一个名字,非关键字参数传递的数组会自动起名为 arr_0, arr_1, … 。
  • kwds: 要保存的数组使用关键字名称。

实例

import numpy as np 
 
a = np.array([[1,2,3],[4,5,6]])
b = np.arange(0, 1.0, 0.1)
c = np.sin(b)
# c 使用了关键字参数 sin_array
#将数组保存为.npz文件
np.savez("runoob.npz", a, b, sin_array = c)
#加载.npz文件
r = np.load("runoob.npz")  
print(r.files) # 查看各个数组名称
print(r["arr_0"]) # 数组 a
print(r["arr_1"]) # 数组 b
print(r["sin_array"]) # 数组 c

输出结果为:

['sin_array', 'arr_0', 'arr_1']
[[1 2 3]
 [4 5 6]]
[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
[0.         0.09983342 0.19866933 0.29552021 0.38941834 0.47942554
 0.56464247 0.64421769 0.71735609 0.78332691]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值