使用 numpy.fromfile 计数属性分块读取大型二进制文件

Read large binary file in chunks using numpy.fromfile count attribute

我有一个很大的二进制文件 (9GB),我需要将其分块读取并保存为 CSV(可能拆分为多个 CSV 文件)以供以后处理。以下代码是我用来读取整个二进制文件的代码。但是,文件太大,我需要构建一个 while 循环或 for 循环,以便分块读取二进制文件内容。我在文档中发现 'numpy.fromfile' 有一个属性 'count' 可以读取多个项目。但是,我想继续分块读取文件(例如,如果我设置 count=100,000,它只读取前 100k 行,就是这样,但是假设我的整个 bin 文件有 1M 行,我希望我的代码以 10 个块读取我的二进制文件,这应该会产生一个最终的 CSV 文件或者可能是 10 个单独的 CSV 文件)直到文件耗尽。

这是我读取整个二进制文件的代码。

dt = np.dtype([('Time','I'), ('Z', 'H'), ('Y', 'H'), ('X', 'H')])
data = np.fromfile('MyFile.bin', dtype=dt, sep='')
data_df = pd.DataFrame(data)
#SOME MORE DATA PROCESSING#
data_df.to_csv('Output\FinalOutput.csv')

我正在将其转换为 DF,因为我需要进行更多数据处理。

可以使用numpyfromfile函数的offset参数

这里是一个读取带有偏移量的二进制文件的示例代码:

import numpy as np
x = np.random.rand(10000)
x.astype('float64').tofile("x.bin")
y = np.fromfile("x.bin", count=100, offset=0)
np.testing.assert_equal(x[:100], y)
y = np.fromfile("x.bin", count=100, offset=800)
np.testing.assert_equal(x[100:200], y)

偏移参数采用开始读取的字节,假设我将值保存为 float64 跳过前 100 个元素需要 800 个字节(每个元素 8 个字节),知道你面对的数据你可以计算数字您需要用作偏移量的字节数