Csv文件只能存储一维数组和二维数组
Csv(comma-separated value,逗号分隔值)
Csv是一种常见的文件格式,用来储存批量数据
将数据写入csv文件
np.savetxt(frame,array,fmt=’%.18e’,delimiter=none)
frame:文件,字符串或产生器,可以是.gz或.bz2的压缩文件。
array:存入文件的数组
fmt:写入文件的格式,例如:%d %.2f %.18e。
%d:文件格式为整数
%.2f:文件格式为两位小数
%.18e:
delimiter:分割字符串,默认是任何空格。
import numpy as np a=np.arange(20).reshape(4,5) np.savetxt('a.csv',a,fmt='%d') 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import numpy as np a=np.arange(20).reshape(4,5) np.savetxt('a.csv',a,fmt='%.2f',delimiter=',') 0.00,1.00,2.00,3.00,4.00 5.00,6.00,7.00,8.00,9.00 10.00,11.00,12.00,13.00,14.00 15.00,16.00,17.00,18.00,19.00
读入csv文件
np.loadtxt(frame,dtype=np.float,delimiter=none,unpack=false)
frame:文件,字符串或产生器,可以是.gz或.bz2的压缩文件
dtype:数据类型,可选
delimiter:分割字符串,默认是任何空格
unpack:如果true,读入属性将分别写入不通过的变量。
import numpy as np a=np.arange(20).reshape(4,5) np.savetxt('a.csv',a,fmt='%d',delimiter=',') 0,1,2,3,4 5,6,7,8,9 10,11,12,13,14 15,16,17,18,19 import numpy as np b=np.loadtxt('a.csv',delimiter=',') #读取的数据放到一个数组中,为浮点型 c=np.loadtxt('a.csv',dtype=np.int,delimiter=',') #读取的数据放到一个数组中,为整型 print(b) [[ 0. 1. 2. 3. 4.] [ 5. 6. 7. 8. 9.] [10. 11. 12. 13. 14.] [15. 16. 17. 18. 19.]] print(c) [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]]
Csv文件的局限性
np.savetext() np.loadtxt() 只能有效存取一维和二维数组
储存
a.tofile(frame,sep=’’,format=’%s’)
frame:文件,字符串
sep:数据分割字符串,如果是空串,写入文件为二进制
format:写入数据的格式。
import numpy as np a=np.arange(100).reshape(5,4,5) print(a) [[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] [[20 21 22 23 24] [25 26 27 28 29] [30 31 32 33 34] [35 36 37 38 39]] [[40 41 42 43 44] [45 46 47 48 49] [50 51 52 53 54] [55 56 57 58 59]] [[60 61 62 63 64] [65 66 67 68 69] [70 71 72 73 74] [75 76 77 78 79]] [[80 81 82 83 84] [85 86 87 88 89] [90 91 92 93 94] [95 96 97 98 99]]] a.tofile("b.dat",sep=",",format='%d') 存入文件内容 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
文件的读取
文件的读取为一维数组,需要知道写入时数组的维度才能还原出来原始数组信息。一般的处理方式为,在另外写一个文件,记录写入时数组维度的信息。
np.fromfile(frame, dtype=float, count=-1,sep=’’)
frame:文件,字符串
dtype:读取的数据类型,默认为浮点型
count:读取元素的个数,-1表示读入整个文件,
sep:数据分割字符串,如果是空串,写入文件为二进制
import numpy as np a=np.arange(100).reshape(5,4,5) print(a) [[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] [[20 21 22 23 24] [25 26 27 28 29] [30 31 32 33 34] [35 36 37 38 39]] [[40 41 42 43 44] [45 46 47 48 49] [50 51 52 53 54] [55 56 57 58 59]] [[60 61 62 63 64] [65 66 67 68 69] [70 71 72 73 74] [75 76 77 78 79]] [[80 81 82 83 84] [85 86 87 88 89] [90 91 92 93 94] [95 96 97 98 99]]] a.tofile("b.dat",sep=",",format='%d') c=np.fromfile("b.dat",dtype=int,sep=",") #读取的数据位一维数组 print(c) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99] d=np.fromfile("b.dat",dtype=int,sep=",").reshape(5,4,5) #可以使用reshape还原数组,但是必须知道写入时数组的维度信息。 print(d) [[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] [[20 21 22 23 24] [25 26 27 28 29] [30 31 32 33 34] [35 36 37 38 39]] [[40 41 42 43 44] [45 46 47 48 49] [50 51 52 53 54] [55 56 57 58 59]] [[60 61 62 63 64] [65 66 67 68 69] [70 71 72 73 74] [75 76 77 78 79]] [[80 81 82 83 84] [85 86 87 88 89] [90 91 92 93 94] [95 96 97 98 99]]]
(一般数据的缓存使用,与其他程序的交互建议csv和tofile方法)
这种读取方式需要基于numpy的自定义文件格式。
数组的储存
np.save(fname,array)或np.savez(fname,array)
frame:文件名,以.npy为扩展名,压缩扩展名为.npz
array:数组变量
数组的读取
np.load(fname)
frame:文件名,以.npy为扩展名,压缩扩展名为.npz
import numpy as np a=np.arange(24).reshape(2,3,4) print(a) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] np.save("a.npy",a) #文件是表头和二进制写入的,打开文件看不懂。 b=np.load("a.npy") #读取可以直接还原到原来的数组 print(b) [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]