Как сохранить список переменных, имена которых (в виде строк) даны? - PullRequest
0 голосов
/ 03 июля 2019

Итак, у меня есть несколько массивов numpy, имена которых (в виде строк) находятся в списке:

mylist = ['arr1', 'arr2', ....]

Я хочу сохранить их с помощью np.save, всех из них. Что я пробовал:

for avar in mylist:
    np.save(avar+'.npy', exec(avar))

Это работает? IDK, по крайней мере, нет ошибки, но при последующей загрузке выдает эту ошибку:

ValueError: Массивы объектов не могут быть загружены, когда allow_pickle = False

Было бы неплохо, если бы вы показали мне, как загрузить их позже в те же имена переменных.

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Если все ваши переменные являются локальными, вы можете сделать

vars = locals()
for astring in mylist:
    np.save(astring + '.npy', vars[astring])

Если у вас также есть некоторые глобальные переменные, то выполните

vars = globals()

@ Alex, если ваши имена переменныхвходя из сети или из внешнего файла, вы рискуете выполнить произвольный код с помощью exec.

0 голосов
/ 03 июля 2019

Я думаю, что понял,

for astring in mylist:
    exec('tmp = ' + astring )
    np.save(astring + '.npy', tmp)

При восстановлении:

for astring in mylist:
    tmp = np.load(astring + '.npy')
    exec(astring ' =  tmp' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...