TypeError:“ _ io.BufferedWriter”对象不可下标

时间:2019-08-13 12:46:47

标签: python-3.x numpy pickle

我在.hdf5文件中存储了一个巨大的数据集,试图将其拆分为多个组。 .hdf5文件包含一个形状为(2 555 904 x 1024 x 2)的数组 我的代码的一个小例子如下:

import pickle
import h5py
import numpy as np

f = h5py.File('RML_2018.hdf5', 'r')
# Assembling M-PSK dataset 
PSK_32 = f['X'][0:106496]
PSK_OQ = f['X'][638976:745472]
PSK_2  = f['X'][851968:958464]
PSK_8  = f['X'][958464:1064960]
PSK_16 = f['X'][1277952:1384448]
PSK_Q  = f['X'][2023424:2129920]

M_PSK  = np.concatenate([PSK_32, PSK_OQ, PSK_2, PSK_8, PSK_16, PSK_Q])
print('shape of M_PSK array :',M_PSK.shape)

del PSK_32
del PSK_OQ
del PSK_2
del PSK_8
del PSK_16
del PSK_Q

with open('Data/M_PSK.pkl', 'wb') as f:
    pickle.dump(M_PSK, f, protocol=4)

# Assembling M-APSK dataset
APSK_16 = f['X'][106496:212992]
APSK_32 = f['X'][532480:638976]
APSK_64 = f['X'][1384448:1490944]
APSK_128= f['X'][1597440:1703936]

M_APSK  = np.concatenate([APSK_16, APSK_32, APSK_64, APSK_128])
print('shape of M_APSK array :',M_APSK.shape)

del APSK_16
del APSK_32
del APSK_64
del APSK_128

with open('Data/M_APSK.pkl', 'wb') as f:
    pickle.dump(M_APSK, f, protocol=4)

如您所见,我正在读取原始数据集的块,将它们连接起来,然后删除以节省内存,最后将连接的数组转储到.pkl文件中

第一部分还可以。但随后出现以下错误:

Traceback (most recent call last):
  File "/home/nechi/PycharmProjects/CNN_MR_v2/cnn.py", line 28, in <module>
    APSK_16 = f['X'][106496:212992]
TypeError: '_io.BufferedWriter' object is not subscriptable

有人可以告诉我这是什么错误消息,我明白了吗? 以及如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

我的问题的答案是,我打开了具有相同名称f的.hdf文件和.pkl文件

f = h5py.File('RML_2018.hdf5', 'r')

with open('Data/M_PSK.pkl', 'wb') as f:
    pickle.dump(M_PSK, f, protocol=4)

这造成了混乱,所以我不得不为文件选择不同的名称,并且它可以工作。