數據CSV文件的存取

什麼是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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章