什么是CSV文件?
CSV是一种常见的额文件格式,用来存储批量数据。
CSV文件的读取与写入
CSV文件的写入
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
- frame:文件、字符串或者产生器,可以是.gz.bz2的压缩文件。
- array:存入文件的数组
- fmt:写入文件的格式,例如:%d,
%2.f %.18e - delimiter :分割字符串,默认是任何空格
import numpy as np
#csv文件的写入
a = np.arange(100).reshape(5,20)
np.savetxt('a.csv', a, fmt='%d', delimiter=',') #如果fmt=‘%.1f’,则显示的是小数
文件将会有序的数组,结果如下:
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文件的读取
np.savetxt(frame, dtype=np.float, delimiter=None, unpack=False)
- frame:文件、字符串或者产生器,可以是.gz.bz2的压缩文件。
- dtype=np.float:数据类型,可选
- delimiter=None:分割字符串,默认是任何空格
- unpack=False:如果是True,读入属性将分别写入不同的变量
import numpy as np
#csv文件的读取
b = np.loadtxt('a.csv', delimiter=',')
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. 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.]]
import numpy as np
#csv文件的读取
c = np.loadtxt('a.csv', dtype=np.int, delimiter=',')
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]]
但是CSV只能有效存储一维或二维数组
多维数组的存取
多维数组的写入
a.tofile(frame, sep='', format='%s')
- frame:文件,字符串
- sep:数据分割字符串,如果是空串,写入文件为二进制
- format:写入数据的格式
import numpy as np
a = np.arange(100).reshape(5,10,2)
a.tofile("b.dat", sep=',', format="%d")
a.tofile("c.dat", 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
d = np.fromfile("b.dat", dtype=np.int, sep=",")
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]
import numpy as np
d = np.fromfile("b.dat", dtype=np.int, sep=",").reshape(5,10,2)
print(d)
结果:
[[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]
[12 13]
[14 15]
[16 17]
[18 19]]
.....
[[80 81]
[82 83]
[84 85]
[86 87]
[88 89]
[90 91]
[92 93]
[94 95]
[96 97]
[98 99]]]
特殊说明;
该方法需要读取时知道存入文件时的数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用可以通过元数据文件来存储额外信息
Numpy的便捷文件存取
Numpy的写入
np.save(fname, array) 或 np.savez(fname, array)
- fname:文件名,以,npy为扩展名,压缩扩展名为.npz
- array:数组变量
Numpy的读取
np.load(fname)
import numpy as np
a = np.arange(100).reshape(5, 10, 2)
np.save('a.npy', a )
b = np.load('a.npy')
print(b)