Запись переменной в файл, включая имя
Скажем, у меня есть следующий словарь в небольшом приложении.
dict = {'one': 1, 'two': 2}
Что делать, если я хочу написать точную строку кода, с именем имени и всем, в файл. Есть ли функция в python, которая позволяет мне это делать? Или мне нужно сначала преобразовать его в строку? Не проблема для его преобразования, но, возможно, есть более простой способ.
Мне не нужен способ конвертировать его в строку, которую я могу сделать. Но если есть встроенная функция, которая делает это для меня, я хотел бы знать.
Чтобы было ясно, что я хотел бы записать в файл:
write_to_file("dict = {'one': 1, 'two': 2}")
Ответы
Ответ 1
функция repr
вернет строку, которая является точным определением вашего dict (за исключением порядка элемента, dicts неупорядочен в python). к сожалению, я не могу сказать, как автоматически получить строку, которая представляет имя переменной.
>>> dict = {'one': 1, 'two': 2}
>>> repr(dict)
"{'two': 2, 'one': 1}"
Запись в файл довольно стандартная, как и любой другой файл:
f = open( 'file.py', 'w' )
f.write( 'dict = ' + repr(dict) + '\n' )
f.close()
Ответ 2
Что-то вроде этого, что вы ищете?
def write_vars_to_file(_f, **vars):
for (name, val) in vars.items():
_f.write("%s = %s\n" % (name, repr(val)))
Использование:
>>> import sys
>>> write_vars_to_file(sys.stdout, dict={'one': 1, 'two': 2})
dict = {'two': 2, 'one': 1}
Ответ 3
использовать pickle
import pickle
dict = {'one': 1, 'two': 2}
file = open('dump.txt', 'w')
pickle.dump(dict, file)
file.close()
и снова прочитать его
file = open('dump.txt', 'r')
dict = pickle.load(file)
EDIT: Угадайте, я неправильно разобрал ваш вопрос, извините... но маринование может помочь все равно.:)
Ответ 4
Вы можете сделать:
import inspect
mydict = {'one': 1, 'two': 2}
source = inspect.getsourcelines(inspect.getmodule(inspect.stack()[0][0]))[0]
print [x for x in source if x.startswith("mydict = ")]
Также: убедитесь, что не затеняли встроенный dict!
Ответ 5
Строковое представление по умолчанию для словаря кажется правильным:
>>> a={3: 'foo', 17: 'bar' }
>>> a
{17: 'bar', 3: 'foo'}
>>> print a
{17: 'bar', 3: 'foo'}
>>> print "a=", a
a= {17: 'bar', 3: 'foo'}
Не уверен, что вы можете получить "имя переменной", поскольку переменные в Python - это просто метки для значений. См. этот вопрос.
Ответ 6
Вы просто хотите знать, как написать строку в file? Сначала вам нужно открыть файл:
f = open("filename.txt", 'w')
Затем вам нужно записать строку в файл:
f.write("dict = {'one': 1, 'two': 2}" + '\n')
Вы можете повторить это для каждой строки (+'\n'
добавляет новую строку, если вы этого хотите).
Наконец, вам нужно закрыть файл:
f.close()
Вы также можете быть немного умнее и использовать with
:
with open("filename.txt", 'w') as f:
f.write("dict = {'one': 1, 'two': 2}" + '\n')
### repeat for all desired lines
Это автоматически закроет файл, даже если возникают исключения.
Но я подозреваю, что это не то, о чем вы просите...