You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:20:29