上两篇文章我们介绍了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=',')
例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)
用这种方式来对数据进行存储,方便在深度学习中, 保存训练集,验证集,测试集,还包括他们的标签,用这个方式存储起来,要啥加载啥,文件数量大大减少,也不会到处改文件名。算是一种较好的存储数据的方式。