Python——numpy文件存取

CSV文件

CSV (Comma‐Separated Value, 逗號分隔值)

CSV是一種常見的文件格式,用來存儲批量數據

1. 文件保存

np.savetxt(frame, array, fmt=%.18e, delimiter=None)

? frame : 文件、字元串或產生器,可以是.gz或.bz2的壓縮文件

? array : 存入文件的數組

? fmt : 寫入文件的格式,例如:%d %.2f %.18e

? delimiter : 分割字元串,默認是任何空格

栗子

a=np.arange(100).reshape(5,20)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

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

b=np.arange(100).reshape(5,20)np.savetxt(b.csv,a,fmt=%.1f,delimiter=,)

#浮點型

0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0

20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0

40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0

60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0

80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0

2. 讀取文件

np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)

? frame : 文件、字元串或產生器,可以是.gz或.bz2的壓縮文件

? dtype : 數據類型,可選

? delimiter : 分割字元串,默認是任何空格

? unpack : 如果True,讀入屬性將分別寫入不同變數

c=np.loadtxt(b.csv,delimiter=,)cOut[55]: array([[ 0., 1., 2., ..., 17., 18., 19.], [ 20., 21., 22., ..., 37., 38., 39.], [ 40., 41., 42., ..., 57., 58., 59.], [ 60., 61., 62., ..., 77., 78., 79.], [ 80., 81., 82., ..., 97., 98., 99.]])c=np.loadtxt(b.csv,dtype=np.int,delimiter=,)cOut[57]: array([[ 0, 1, 2, ..., 17, 18, 19], [20, 21, 22, ..., 37, 38, 39], [40, 41, 42, ..., 57, 58, 59], [60, 61, 62, ..., 77, 78, 79], [80, 81, 82, ..., 97, 98, 99]])

CSV只能有效存儲一維和二維數組

np.savetxt() np.loadtxt()只能有效存取一維和二維數組

任意維度文件的存取

a.tofile(frame, sep=, format=%s)

? frame : 文件、字元串

? sep : 數據分割字元串,如果是空串,寫入文件為二進位

? format : 寫入數據的格式

a=np.arange(100).reshape(5,10,2)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

a=np.arange(100).reshape(5,10,2)a.tofile(b.dat,format=%d)

! " # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c

np.fromfile(frame, dtype=float, count=‐1, sep=)

? frame : 文件、字元串

? dtype : 讀取的數據類型

? count : 讀入元素個數,‐1表示讀入整個文件

? sep : 數據分割字元串,如果是空串,寫入文件為二進位

a=np.arange(100).reshape(5,10,2)a.tofile(b.dat,sep=,,format=%d)c=np.fromfile(b.dat,dtype=np.int,sep=,)

cOut[70]: array([ 0, 1, 2, ..., 97, 98, 99])c=np.fromfile(b.dat,dtype=np.int,sep=,).reshape(5,10,2)cOut[72]: array([[[ 0, 1], [ 2, 3], [ 4, 5], ..., [14, 15], [16, 17], [18, 19]], ..., ..., [94, 95], [96, 97], [98, 99]]])

a=np.arange(100).reshape(5,10,2)a.tofile(b.dat,format=%d)c=np.fromfile(b.dat,dtype=np.int).reshape(5,10,2)cOut[76]: array([[[ 0, 1], [ 2, 3], [ 4, 5], ..., [14, 15], [16, 17], [18, 19]], ..., ..., [94, 95], [96, 97], [98, 99]]])

該方法需要讀取時知道存入文件時數組的維度和元素類型

a.tofile()和np.fromfile()需要配合使用

可以通過元數據文件來存儲額外信息

numpy 便捷文件存取

np.save(fname, array) 或np.savez(fname, array)

? fname : 文件名,以.npy為擴展名,壓縮擴展名為.npz

? array : 數組變數

np.load(fname)

? fname : 文件名,以.npy為擴展名,壓縮擴展名為.npz

a=np.arange(100).reshape(5,10,2)np.save(a.npy,a)b=np.load(a.npy)bOut[80]: array([[[ 0, 1], [ 2, 3], [ 4, 5], ..., [14, 15], [16, 17], [18, 19]],

推薦閱讀:

為什麼 Python 的類不構成作用域(scope)?
python適合做數據分析還是做開發?
在數學建模問題中,matlab和Python各自的特點有哪些?
學習python有什麼用?python的實際應用有哪些?
python入門教程,求知友推薦?

TAG:Python | Python入门 | numpy |