numpy.fromfile
numpy.fromfile(file, dtype=float, count=-1, sep='', offset=0)
从文本或二进制文件中的数据构造一个数组。
读取已知数据类型的二进制数据以及解析简单格式化的文本文件的一种高效方法。使用tofile
方法写入的数据可以使用此函数读取。
参数: | file : 打开文件对象或文件名。 在1.17.0版中进行了更改:pathlib.Path现在接受对象。 dtype : 返回数组的数据类型。对于二进制文件, 它用于确定文件中各项的大小和字节顺序。 支持大多数内置数字类型,并且可能支持扩展名类型。 1.18.0版中的新功能:复杂 count : 要读取的项目数。-1表示所有项目(即完整文件)。 sep :str 如果文件是文本文件,则项目之间的分隔符。 空( 分隔符中的空格( 仅由空格组成的分隔符必须至少匹配一个空格。 offset : 与文件当前位置的偏移量(以字节为单位)。 默认值为 1.17.0版中的新功能。 |
Notes
不要依赖于tofile和fromfile数据存储的组合,因为生成的二进制文件不是平台无关的。特别是,不保存字节顺序或数据类型信息。可以.npy
使用save和load代替平台独立格式存储数据。
例子
1)从二进制文件中读取数据
假设我们有一个二进制文件 data.bin
,包含一些浮点数,可以使用 numpy.fromfile
读取这些数据。
import numpy as np # 创建一些数据并保存到二进制文件 data = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32) data.tofile('data.bin') #从这个文件中读取数据: # 从二进制文件中读取数据 data = np.fromfile('data.bin', dtype=np.float32) print(data)
2)从文本文件中读取数据
import numpy as np # 创建并写入 data.txt 文件 with open('data.txt', 'w') as f: f.write('1.1 2.2 3.3 4.4 5.5') # 从文本文件中读取数据 data = np.fromfile('data.txt', dtype=np.float32, sep=' ') print(data)
3)读取部分数据
可以使用 count
参数来限制读取的项数:
import numpy as np # 创建一些数据并保存到二进制文件 data = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32) data.tofile('data.bin') # 从二进制文件中读取前3个数据 data = np.fromfile('data.bin', dtype=np.float32, count=3) print(data)
4)使用偏移量读取数据
可以使用 offset
参数从文件的特定位置开始读取数据:
import numpy as np # 创建一些数据并保存到二进制文件 data = np.array([1.1, 2.2, 3.3, 4.4, 5.5], dtype=np.float32) data.tofile('data.bin') # 从二进制文件中读取数据,跳过前两个数据 data = np.fromfile('data.bin', dtype=np.float32, offset=2*4) # 4 bytes per float32 print(data)
5)使用示例
import numpy as np import tempfile # 构造一个复杂的 ndarray dt = np.dtype([('time', [('min', np.int64), ('sec', np.int64)]), ('temp', float)]) x = np.zeros((1,), dtype=dt) x['time']['min'] = 10 x['time']['sec'] = 0 x['temp'] = 98.25 print("Original ndarray:") print(x) # 将原始数据保存到磁盘 fname = tempfile.mkstemp()[1] x.tofile(fname) # 从磁盘读取原始数据 x_from_file = np.fromfile(fname, dtype=dt) print("\nndarray read from file using np.fromfile:") print(x_from_file) # 推荐的存储和加载数据的方式 np.save(fname, x) x_loaded = np.load(fname + '.npy') print("\nndarray read from file using np.save and np.load:") print(x_loaded)