数据的csv文件存取

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]]]

numpy的便捷文件存取

(一般数据的缓存使用,与其他程序的交互建议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]]]