数组文件相关操作
二进制存取—save、savez和load方法
numpy也是可以读取存储在磁盘上的文本或二进制数据的,只是使用次数与 Pandas的文件读取相比少很多。
相应的方法是 save和load方法,默认情况下保存格式是拓展名为 ".npy"的文件。
这里输入的只是文件名,而没有指定拓展名,会被默认为 ".npy"文件。
但是读取的时候一定要指定文件的拓展名。
在 some_array.npy文件中是这样的,
二进制的形式。
savez方法将多个数组保存到一个压缩文件中,
此时是将数组存放到拓展名为".npz"的文件中。加载npz文件获取到的是一个类似字典的对象。
存取文本文件
1)loadext、genformtxt方法
numpy中使用loadtxt或genfromtxt方法将数据加载到普通的数组中。
假设有一个 array_ex.txt文件,文件中的内容为,
这里使用的是逗号将各个数字分隔开,实际情况分隔数据的方式有很多种,
# StringIO behaves like a file object
from io import StringIO
c = StringIO("0 1\n2 3")
np.loadtxt(c)
# 返回 array([[ 0., 1.],
# [ 2., 3.]])
d = StringIO("M 21 72\nF 35 58")
np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'), 'formats': ('S1', 'i4', 'f4')})
# 返回 array([('M', 21, 72.0),
# ('F', 35, 58.0)],
# dtype=[('gender', '|S1'), ('age', '<i4'), ('weight', '<f4')])
c = StringIO("1,0,2\n3,0,4")
x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True) # 返回x = array([ 1., 3.])
# y = array([ 2., 4.])
savetxt方法执行的是与loadtxt相反的操作,参数相同,只不过是按照给定格式存放。genfromtxt与loadtxt相似,会在以后讲解。
高级输入输出方法
save和load方法可用于读写磁盘上以二进制形式存储的数组。numpy中还提供了更为复杂的工具。
1)内存映像文件—memmap方法
内存映像文件是将磁盘上非常大的二进制数据文件当做内存中的数组进行处理,主要是在文件太大(甚至大过内存的情况下)使用。numpy实现了一个类似于ndarray的memmap对象,允许将大文件分成小段进行读写,而不是一次性将文件读入内存。memmap也有与一般数组相同的方法。
memmap类传入一个文件路径、数据类型、形状和模式,就可以创建一个memmap对象,
memmap特有方法,
对memmap进行切片返回的是磁盘上的数据的视图。如果将另外的值赋予这些视图,会被缓存在内存中,调用flush方法可将其写入磁盘。
del将memmap对象垃圾回收,目前的模式是w+,所以对其进行的修改会全部写入磁盘。