如何解决Python中array.array对象无read属性的AttributeError
解决AttributeError: 'array.array'对象没有'read'属性的问题
错误原因
Python标准库的array.array类型不存在read()方法,你代码里调用binvalues.read(fid, ...)属于API误用,这是触发报错的直接原因。要从二进制文件读取数据到array.array实例,正确方法是使用fromfile()。
修复方案
将代码中这一行:
binvalues.read(fid, volume*arr[dim-1])
替换为:
binvalues.fromfile(fid, volume * arr[dim-1])
完整修复后的代码
import os from functools import reduce import numpy import array from utils import * def load_raw_data_with_mhd(filename): meta_dict = read_meta_header(filename) dim = int(meta_dict['NDims']) assert(meta_dict['ElementType']=='MET_FLOAT') arr = [int(i) for i in meta_dict['DimSize'].split()] volume = reduce(lambda x,y: x*y, arr[0:dim-1], 1) pwd = os.path.split(filename)[0] if pwd: data_file = pwd +'/' + meta_dict['ElementDataFile'] else: data_file = meta_dict['ElementDataFile'] print (data_file) fid = open(data_file,'rb') binvalues = array.array('f') # 替换为正确的fromfile方法 binvalues.fromfile(fid, volume*arr[dim-1]) if is_little_endian(): # assume data in file is always big endian binvalues.byteswap() fid.close() data = numpy.array(binvalues, numpy.float) data = numpy.reshape(data, (arr[dim-1], volume)) return (data, meta_dict)
补充说明
array.array.fromfile()方法会从指定文件对象fid中读取指定数量的元素(此处为volume*arr[dim-1]个float类型元素),并添加到数组中,完全匹配你原代码的业务意图。
内容的提问来源于stack exchange,提问作者Gomathi
相关产品推荐
相关产品推荐

