Сохранение файла с именем переменной массива Python - PullRequest
0 голосов
/ 29 января 2019

Я хочу сохранить файл с тем же именем, что и у переменной.См. Следующий код:

training = np.arange(200)
np.savetxt(training.txt,training)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'txt'

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

np.savetxt("training.txt",training)

Но в моей программе есть разные переменные, и я хочу, чтобы при вызовеФункция сохранения файла Имя файла должно автоматически приниматься как само имя переменной.
Например, если переменная question или answer, то когда я говорю save(), имя файла автоматически должно быть question.txt или answer.txt
Подскажите, что я могу сделать для этого.

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Работа с именами идентификаторов в Python обременительна (и не является обычной практикой).Почему бы вам не попробовать словарь?

import np

my_dict = dict()

def save(name: str):
    np.savetext('{}.txt'.format(name), my_dict[name])

my_dict['training'] = np.arange(200)
save('training')
0 голосов
/ 29 января 2019

Очень хакерский способ - получить имя переменной из локальной таблицы символов.Если вы знаете, что у вас есть только один массив, вы можете просто получить первый результат ..

>>> 
>>> import numpy as np
>>> training = np.arange(200)
>>> def getndarrayname(env):
...     return list(filter(lambda x: isinstance(env[x], np.ndarray), env.keys()))
... 
>>> getndarrayname(locals())
['training']
>>> 
0 голосов
/ 29 января 2019

Нет хорошего способа, которым это может работать.Переменная в Python - это просто ссылка на реальный объект.Имя не имеет значения.

Вам нужен способ сохранить вашу переменную с заданным именем, то есть, что такое ассоциативные таблицы, и это dict в Python.

Этобудет выглядеть примерно так:

variables={}
variables["training"] = np.arange(200)
for key, val in variables.items():
    np.savetxt(key, value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...