csv文件即逗号分隔值文件(Comma-Separated Values有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。常用于存储一维/二维数据。

1.numpy中提供了写入的函数

np.savetxt(fname,array,fmt='%.18e',delimiter=None)       #%.18e是以科学计数法保留18位小数的浮点数形式

其中

  • fname:文件、字符串、产生器的名字,也可以是.gz/.bz2压缩文件名
  • array:要存入文件的数组
  • fmt:将元素写入文件的格式
  • delimiter:数据间的分割字符串,csv中需要定义为逗号

下面给出一个例子:

import numpy as np
a = np.arange(100).reshape(5,20)
np.savetxt('D:/myPython/work1.csv',a,fmt='%d',delimiter=',')

运行结果:

python 处理 csv numpy numpy处理csv文件_python

2.numpy提供了读出的函数

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

其中

  • fname:文件、字符串、产生器的名字,也可以是.gz/.bz2压缩文件名
  • dtype:将csv文件中的字符串变成特定格式
  • delimiter:解析时数据间的分割字符串,csv中需要定义为逗号
  • unpack:默认False,读入的数据写入一个数组,若为True,按读入属性分别写入不同变量。

下面给出一例

import numpy as np
b=np.loadtxt('D:/myPython/work1.csv',dtype=np.float,delimiter=',')

运行结果:

python 处理 csv numpy numpy处理csv文件_csv文件存取_02

以上两个函数是针对一维和二维数据的存取,而对于多维数据,可采用以下两种方法。

方法一:

3.a.tofile(fname,sep='',format='%s')(a为事先定义的ndarray数组)

其中

  • fname:文件、字符串、产生器的名字,也可以是.gz/.bz2压缩文件名
  • sep:数据分割的字数串,若为空,则认为写入二进制
  • format:写入数据的格式

4.np.fromfile(fname,dtype=float,count=-1,sep='')

  • fname:文件、字符串、产生器的名字,也可以是.gz/.bz2压缩文件名
  • dtype:读取的数据类型
  • count:读入元素个数,-1则读入整个文件
  • sep:数据分割的字符串

给出一例:

import numpy as np
a=np.arange(100).reshape(5,10,2)
a.tofile('D:/myPython/work2.dat',sep=',',format='%d')
c=np.fromfile('D:/myPython/work2.dat',dtype=np.int,sep=',').reshape(5,10,2)

例中需要注意的是,写入和读出的数据格式必须一致,写入文件其实写入的是序列,维度信息需要在读出时重新再使用一次reshape,获取原本的信息。由于存入时维度信息会被丢失,所以读出者必须知道原本的维度信息才能将数组还原,这是这种方法的缺点。

方法二:

使用numpy提供的np.save(np.savez)和np.load

5.np.save(fname,array)或np.savz(fname,array)

其中

  • fname:文件名,以.npy为扩展名,压缩扩展名为.npz
  • array:数组变量

6.np.load(fname)

fname:文件名,以.npy为扩展名,压缩扩展名为.npz

这种方法使用时非常简单快捷,存入时已经将原数组的形状维度等信息存入文件,只要使用load函数就能自动解析出原数组,缺点是这种方式必须使用numpy给出的自定义文件格式。个人觉得这个方法更好用。

使用代码:

import numpy as np
a=np.arange(100).reshape(5,10,2)
np.save('a.npy',a)
b=np.load('a.npy')