上两篇文章我们介绍了numpy函数一些基本用法,以及其扩展函数的用法。在这里介绍一下numpy库来进行文件的读写。

一、利用numpy读取文件

1. numpy进行存、储读取csv文件

CSV(以逗号为分割符),是一种常见的文件格式,用来存储批量数据

存储:

# 文件存储
np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='n', 
          header='', footer='', comments='# ', encoding=None)
  • fname: 文件,字符串,可以是.gz或者.bz2的压缩文件
  • X:
  • fmt: 写入文件的格式,例如:%d %.2f %.18e
  • delimiter:
  • newline: 分割行的字符串
  • header: 文件头

读取:

# 文件读取
np.loadtxt(fname,  delimiter=None, skiprows=0,
           usecols=None)

  • fname:
  • delimiter: 分割列的字符串,默认是任何空格
  • skiprows:
  • usecols:

例1, 存储:

# 存储
import numpy as np
a = np.arange(50).reshape(5, 10)
# 保存为.txt文件
file = np.savetxt('./test/a.csv', a, fmt = '%d',delimiter=',')

python将numoy写入csv numpy将数据写入txt_文件名

例2,读取:

# 文件读取
np_file = np.loadtxt('./test/a.csv', delimiter=',')
print(np_file)
# 只取第一列和第五列数据
np_file1 = np.loadtxt('./test/a.csv',usecols=(0, 4), delimiter=',')
print(np_file1)

"""
np_file: [[ 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.]]
第1列和第五列数据 [[ 0.  4.]
                 [10. 14.]
                 [20. 24.]
                 [30. 34.]
                 [40. 44.]]
"""

注意:

2. numpy 进行多维数据的存取:

存储:

a.tofile(fid, sep="", format="%s")


fid:

  • sep:
  • format: 写入数据的格式

读取:

fromfile(file, dtype=float, count=-1, sep='')


  • file:
  • dtype: 读取的数据类型
  • count:读入元素个数,-1表示读入整个文件
  • sep:数据分割字符串,如果是空串,写入文件为二进制

存储:

# 多维数组的存储
b = np.arange(50).reshape(5, 5, 2)
b.tofile("./test/b.bat", sep=",", format="%d")

读取:

# 多维数组的读取
np.fromfile('./test/b.bat', dtype=np.int, sep=',')
"""
array([ 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])
"""
np.fromfile('./test/b.bat', dtype=np.int, sep=',').reshape(5, 5,2)
"""
array([[[ 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]]])
"""

注意:该方法在读取时需要知道存入文件时数组的维度和元素类型,b.tofile()和np.fromfile()需要配合使用 可以通过元数据文件来存储额外信息。

3. numpy的便捷文件存取

np.save(file, arr)   np.savez(file, arr)


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

load()自动识别npz文件,并且返回一个类似于字典的对象,可以通过数组名作为键获取数组的内容。

np.load(file)

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

a = np.arange(50).reshape(5,5,2)
np.save("a.npy", a)
b = np.load('a.npy')
print(b)

用这种方式来对数据进行存储,方便在深度学习中, 保存训练集,验证集,测试集,还包括他们的标签,用这个方式存储起来,要啥加载啥,文件数量大大减少,也不会到处改文件名。算是一种较好的存储数据的方式。