Ошибка загрузки словаря python из массивов numpy [duplicate]

Ключ App-Secret должен оставаться закрытым - но при выпуске приложения они могут быть отменены некоторыми ребятами.

для этих парней он не скрывает, блокирует либо код ProGuard. Это рефактор, и некоторые платные обфускаторы вставляют несколько побитовых операторов, чтобы вернуть строку jk433g34hg3. Вы можете сделать 5-15 минут дольше взлома, если вы работаете 3 дня:)

Лучший способ сохранить это как есть, imho.

Даже если вы храните на стороне сервера (ваш ПК), ключ может быть взломан и распечатан. Может быть, это занимает больше всего времени? Во всяком случае, это всего лишь несколько минут или несколько часов в лучшем случае.

Обычный пользователь не декомпилирует ваш код.

11
задан louic 26 March 2014 в 14:57
поделиться

2 ответа

Можно восстановить данные:

In [41]: a = {'0': {'A': array([1,2,3]), 'B': array([4,5,6])}}

In [42]: np.savez('/tmp/model.npz', **a)

In [43]: a = np.load('/tmp/model.npz')

Обратите внимание, что dtype является «объектом».

In [44]: a['0']
Out[44]: array({'A': array([1, 2, 3]), 'B': array([4, 5, 6])}, dtype=object)

И в массиве есть только один элемент. Этот элемент является питоновым типом!

In [45]: a['0'].size
Out[45]: 1

Вы можете получить значение с помощью метода item() (NB: это не метод items() для словарей, все, что присуще классу NpzFile, но является numpy.ndarray.item() методом , который копирует значение в массиве в стандартные сканеры Python . В массиве object dtype любое значение, хранящееся в ячейке массива (даже словарь), является скаляром Python:

In [46]: a['0'].item()
Out[46]: {'A': array([1, 2, 3]), 'B': array([4, 5, 6])}

In [47]: a['0'].item()['A']
Out[47]: array([1, 2, 3])

In [48]: a['0'].item()['B']
Out[48]: array([4, 5, 6])

Чтобы восстановить a как dict dicts:

In [84]: a = np.load('/tmp/model.npz')

In [85]: a = {key:a[key].item() for key in a}

In [86]: a['0']['A']
Out[86]: array([1, 2, 3])
11
ответ дан unutbu 31 August 2018 в 19:21
поделиться

Исходя из этого ответа: восстановить dict из массива 0-d numpy

После

a = {'key': 'val'}
scipy.savez('file.npz', a=a) # note the use of a keyword for ease later

вы можете использовать

get = scipy.load('file.npz')
a = get['a'][()] # this is crazy maybe, but true
print a['key']

Он также работал бы без использования аргумента ключевого слова, но я думал, что это тоже стоит поделиться.

1
ответ дан Community 31 August 2018 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: