numpy数组相关的文件操作

数组文件相关操作

二进制存取—save、savez和load方法

numpy也是可以读取存储在磁盘上的文本或二进制数据的,只是使用次数与 Pandas的文件读取相比少很多。

相应的方法是 save和load方法,默认情况下保存格式是拓展名为 ".npy"的文件。
numpy数组相关的文件操作
这里输入的只是文件名,而没有指定拓展名,会被默认为 ".npy"文件。
numpy数组相关的文件操作
但是读取的时候一定要指定文件的拓展名
numpy数组相关的文件操作
在 some_array.npy文件中是这样的,
numpy数组相关的文件操作
二进制的形式。

savez方法将多个数组保存到一个压缩文件中,
numpy数组相关的文件操作
此时是将数组存放到拓展名为".npz"的文件中。加载npz文件获取到的是一个类似字典的对象。
numpy数组相关的文件操作

存取文本文件

1)loadext、genformtxt方法

numpy中使用loadtxt或genfromtxt方法将数据加载到普通的数组中。

假设有一个 array_ex.txt文件,文件中的内容为,
numpy数组相关的文件操作
这里使用的是逗号将各个数字分隔开,实际情况分隔数据的方式有很多种,
numpy数组相关的文件操作

# 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对象,
numpy数组相关的文件操作
memmap特有方法,
numpy数组相关的文件操作
numpy数组相关的文件操作
numpy数组相关的文件操作
对memmap进行切片返回的是磁盘上的数据的视图。如果将另外的值赋予这些视图,会被缓存在内存中,调用flush方法可将其写入磁盘。
numpy数组相关的文件操作
del将memmap对象垃圾回收,目前的模式是w+,所以对其进行的修改会全部写入磁盘。

上一篇:np.memmap读取大文件


下一篇:(五)Linux内存管理zone_sizes_init