我需要在 Python 3.6 中读取一个简单但大(500MB)的二进制文件。该文件是由 C 程序创建的,它包含 64 位双精度数据。我尝试使用 struct.unpack 但这对于大文件来说非常慢。
这是我读取的简单文件:
def ReadBinary():
fileName = 'C:\\File_Data\\LargeDataFile.bin'
with open(fileName, mode='rb') as file:
fileContent = file.read()
Run Code Online (Sandbox Code Playgroud)
现在我有文件内容。将其解码为 64 位双精度浮点或无需进行格式转换即可读取的最快方法是什么?
如果可能,我想避免分块读取文件。我想一口气读完它,就像 C 一样。
您可以使用array.array('d')
的 fromfile
方法:
def ReadBinary():
fileName = r'C:\File_Data\LargeDataFile.bin'
fileContent = array.array('d')
with open(fileName, mode='rb') as file:
fileContent.fromfile(file)
return fileContent
Run Code Online (Sandbox Code Playgroud)
这是作为原始机器值的 C 级读取。mmap.mmap
还可以通过创建工作memoryview
中的mmap
对象和铸造它。