【python】文件的save和load:npy,npz,txt,csv,pkl,(持更)

可学习文献:
《numpy数据的存取》

一. npy

1.1 np.save

save(file, arr, allow_pickle=True, fix_imports=True)保存数组arr刀文件file,并允许序列化pickle.其中的fix_imports可以允许python2和python3之间的兼容。

  • 注意:np.save默认的文件格式为.npy,如果不是以其结尾,则自动添加。

1.2 np.load

  • load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')
  • mmap_mode : {None, ‘r+’, ‘r’, ‘w+’, ‘c’}, optional
  • allow_pickle : bool, optional.If true,允许加载存储在npy文件中的pickle对象数组。

1.3 保存与读取

1.3.1 保存一个numpy数组并读取
a = np.random.randint(10,size=(5,))
np.save("a",a) # 保存数据,末尾可自动添加.npy
a1=np.load("a.npy")# 读取数据
a1 # 查看数据

out:array([4, 1, 8, 7, 6])

1.3.2 保存一个整齐的list并读取

在这里插入图片描述在这里插入图片描述

注释:

  1. dtype='<U1':第一个字符是字节序,< 表示小端,> 表示大端,| 表示平台的字节序;U是上表中的最后一行Unicode的意思;1代表长度字符串的长度
1.3.3 保存一个参差不齐的嵌套序列

参差不齐的嵌套序列的举例如下:

1. ['a','b',[1,2]] ##含嵌套序列
2. [np.array([1,4]),np.array([2,3,5])] ##长度参差不齐

当遇到以上类似的情况的时候,np.save()会弹出worning,在np.load(file)会报错,提示使用np.load(file,allow_pickle=True)
在这里插入图片描述

二、npz

2.1 np.savez和np.loads

savez(file, *args, **kwds)loads(*args, **kwargs)
举例的数据

from scipy.sparse import coo_matrix
# 建立稀疏矩阵
data = [1,2,3,4]
row = [3,6,8,2]
col = [0,7,4,9]
c = coo_matrix((data,(row,col)),shape=(10,10)) #构建10*10的稀疏矩阵,其中不为0的值和位置在第一个参数
print(c)

在这里插入图片描述

2.2 单个数组的np.savez保存和读取np.load

在这里插入图片描述在这里插入图片描述

2.3 多个数组的保存np.savez和读取np.load

在这里插入图片描述

2.4 np.load加载压缩后的npz

保存为稀疏矩阵
sparse.save_npz("cc.npz",c)
读取稀疏矩阵
在这里插入图片描述
值得注意的是:使用np.loadz读取后的数据虽然类似dict,但不是真的dict无法使用c2.keys()的方式获取数据的key.如果想知道具体包含那些数据:

  1. 采用上面的方法c2.__dict__
  2. 调用属性c2.files
  3. 采用循环的方法:for k in c2.keys() :print k
    在这里插入图片描述

2.4 scipy.sparse中的save_npz和load_npz

  • 栗子:
from scipy.sparse import coo_matrix
# 建立稀疏矩阵
data = [1,2,3,4]
row = [3,6,8,2]
col = [0,7,4,9]
c = coo_matrix((data,(row,col)),shape=(10,10)) 
  • 保存文件
    save_npz(file, matrix, compressed=True) 保存一个使用'.npz'格式的稀疏矩阵为一个文件
  • 读取文件
    load_npz(file) 从一个使用'.npz'格式的文件中加载一个稀疏矩阵
    在这里插入图片描述
    根据稀疏矩阵的类型coo_matrix可以得到数据的读取形式
  • 文件加载后的对象的属性
    在这里插入图片描述

三、csv

pd.read_csv(file)

四、txt

4.1 np.savetext和np.loadtxt

savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)

  • X:1D or 2D array_like

loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)

  • dtype: 生成array数组的元素的类型,默认float

4.2 数组的txt保存和读取

ar = np.array([[1,2,3],
               [11,22,33],
               [2,3,4,],
               [22,33,44],
               [5,6,7]]) ##生成数组

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 提醒: 如果txt中存在非数字的字符,则np.loadtxt(file)会报错。报错原因类似:ValueError: could not convert string to float: ‘row’
  • 在这里插入图片描述由于是首行含有非数字字符,所以读取失败

4.3 循环读写txt,最后读取记录

背景描述:在做一个模型训练或着测试的时候,我们希望将一些标量数据,每次保存下来。在读取的该数据的时候可以生成数组,从而方便作图。
循环写入数据

# 1. 创建循环的数据
a = np.random.uniform(size=(20,3))#20行3列的数据
# 2. 循环写入txt
for i in range(20):
    f = open("loss2.txt","a+")#a+表示每次打开txt,不清空,续写
    f.write(str(a[i][0])+" ")#每次写入一个字符串,不可是float
    f.write(str(a[i][1])+" ")
    f.write(str(a[i][2])+"\n")
    f.close()

查看txt数据
在这里插入图片描述
读取数据

b=np.loadtxt("loss2.txt")

验证

np.sum(b==a) #20*3=60,每次位置都是True

在这里插入图片描述

五、pkl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值