Я нашел простой способ получить значение словаря, и его имя ! Я еще не уверен насчет чтения, я собираюсь продолжить исследование и посмотреть, смогу ли я это выяснить.
Вот код:
your_dict = {'one': 1, 'two': 2}
variables = [var for var in dir() if var[0:2] != "__" and var[-1:-2] != "__"]
file = open("your_file","w")
for var in variables:
if isinstance(locals()[var], dict):
file.write(str(var) + " = " + str(locals()[var]) + "\n")
file.close()
Единственная проблема здесь в том, что он выведет каждый словарь в вашем пространстве имен в файл, может быть, вы можете отсортировать их по значениям? locals()[var] == your_dict
для справки.
Вы также можете удалить if isinstance(locals()[var], dict):
, чтобы вывести КАЖДУЮ переменную в вашем пространстве имен, независимо от типа. Ваш вывод выглядит точно так же, как ваше объявление your_dict = {'one': 1, 'two': 2}
.
Надеюсь, это сделает тебя еще на шаг ближе! Я внесу изменения, если смогу выяснить, как читать их обратно в пространство имен:)
--- EDIT ---
Понял! Я добавил несколько переменных (и типов переменных) для доказательства концепции. Вот как выглядит мой «testfile.txt»:
string_test = Hello World
integer_test = 42
your_dict = {'one': 1, 'two': 2}
А вот код, который обрабатывает его:
import ast
file = open("testfile.txt", "r")
data = file.readlines()
file.close()
for line in data:
var_name, var_val = line.split(" = ")
for possible_num_types in range(3): # Range is the == number of types we will try casting to
try:
var_val = int(var_val)
break
except (TypeError, ValueError):
try:
var_val = ast.literal_eval(var_val)
break
except (TypeError, ValueError, SyntaxError):
var_val = str(var_val).replace("\n","")
break
locals()[var_name] = var_val
print("string_test =", string_test, " : Type =", type(string_test))
print("integer_test =", integer_test, " : Type =", type(integer_test))
print("your_dict =", your_dict, " : Type =", type(your_dict))
Вот что выводит:
string_test = Hello World : Type = <class 'str'>
integer_test = 42 : Type = <class 'int'>
your_dict = {'two': 2, 'one': 1} : Type = <class 'dict'>
Мне действительно не нравится, как работает приведение здесь, блок try-кроме громоздок и уродлив. Еще хуже, вы не можете принять просто любой тип! Вы должны знать, что вы ожидаете получить. Это было бы не так плохо, если бы вы заботились только о словарях, но я действительно хотел что-то более универсальное.
Если кто-нибудь знает, как лучше разыграть эти входные переменные, я бы ЛЮБИЛ услышать об этом!
Несмотря на это, это все равно поможет вам: D Я надеюсь, что я помог!
Непосредственное решение вашей проблемы, но вы можете использовать hostname ()
и условный оператор для выбора желаемого шрифта:
if hostname() == 'home-pc'
set guifont=...
elseif hostname() == 'work-pc'
set guifont=...
else
set guifont=...
endif