Python——numpy文件存取

浏览: 1524

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=',')


c
Out[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=',')


c
Out[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=',')
c

Out[70]: array([ 0, 1, 2, ..., 97, 98, 99])

c=np.fromfile('b.dat',dtype=np.int,sep=',').reshape(5,10,2)

c
Out[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)

c
Out[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')

b
Out[80]:
array([[[ 0, 1],
[ 2, 3],
[ 4, 5],
...,
[14, 15],
[16, 17],
[18, 19]],
推荐 0
本文由 霍开拓 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册