gpt4 book ai didi

Python - 读写结构化二进制文件

转载 作者:行者123 更新时间:2023-11-28 17:12:55 24 4
gpt4 key购买 nike

目前我正在尝试操作一种二进制文件,哪个结构是这样的:

FileHeader + [SectionHeader + Binary(1D-array)] * NumSetions

在网上搜索后,我想出了下面的代码来读取它:

import numpy as np

# Always BIG Endian
#file_header bytes: 12
file_header_dtype = np.dtype([
('nsection', '>i4'), # number of sections
('nsample', '>i4'), # number of samples for each section
('dt', '>f4'), # sampling rate
])

#section_header bytes: 28
section_header_dtype = np.dtype([
('rec', '>i4'), # record number
('x', '>f8'), # x, in meter
('y', '>f8'), # y, in meter
('z', '>f8'), # z, in meter
])

def dtype_section(nt):
return np.dtype(section_header_dtype.descr + [('binary', ('>f4',nt))])

def read_file_header(_file):
with open(_file, 'rb') as f:
file_header = np.fromstring(f.read(12), dtype=file_header_dtype)
return file_header

def readFile(filename):
raw = open(filename, 'rb')
file_header = np.fromstring(raw.read(12), dtype=file_header_dtype)
nt = file_header['nsample'][0]
dtype_file_sections = dtype_section(nt)
data = np.fromstring(raw.read(), dtype=dtype_file_sections)
return (file_header, data)

通过这种方式,我可以轻松调用 header strip 化的二进制部分并执行 plt.imshow 或其他任何操作。

data = readFile('site1.bin')
data_arr = data[1]['binary']
#plt.imshow(data_arr)

问题是,我找不到在保持相同数据结构的同时输出数据的方法

ndarray.tofile() 每次只对一个数组有效

np.array((data[0],data[1])).tofile('test') 会导致 IOError

IOError: cannot write object arrays to a file in binary mode

我是 Python 的新手,我不确定我是否犯了任何错误。或者我应该考虑另一种方式来读取这种文件,而不是使用 numpy.dtype?请帮助我。

最佳答案

直接的方法是简单地写入一个二进制文件:

with open('test','wb') as f:
f.write(data[0].tobytes())
f.write(data[1].tobytes())

关于Python - 读写结构化二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46357545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com