2014-06-03 3 views
0

Фон:
Я хотел бы импортировать постоянные данные конфигурации для модели Python из файла. Я бы хотел избежать использования xml, json, pickle, et. и др. потому что:Вывести постоянные данные в действительный python

  • Я хочу что-то человеческое читаемый и легко поддерживать
  • Я хочу, чтобы избежать заставляя своих пользователей, чтобы узнать еще один язык. Получение более 50 старших инженеров для изучения нового языка (Python) не было настоящим подвигом. Сейчас мне не нужно добавлять еще один список в список.

Моя цель - предоставить пользователям возможность создавать простые конфигурации для моей модели, написав простые словари Python. Затем моя модель импортирует словарь и уходит.

Мои модели создаются динамически на основе базового оборудования, поэтому я хотел бы, чтобы моя модель также могла создавать словарь по умолчанию и записывать его (в файл) в виде кода Python для обновления или изменения пользователем.

Вопрос:
Как я могу выводить простые объекты Python, такие как простые словари, как код Python?

Отказ от ответственности:
Для тех людей, которые хотят ссылаться на соображения безопасности, чтобы не делать этого, да, я знаю риски импорта кода Python напрямую. Эти модели используются в ограниченной частной корпоративной среде (например, группе разработки оборудования) и требуют специального, непубличного оборудования для запуска. Мои пользователи имеют прямой доступ к аппаратным средствам и корневому доступу, поэтому уборка моих моделей является наименее удовлетворительным способом увольнения и/или ареста.

Ссылка: https://stackoverflow.com/a/23587727/310399

+0

Я не уверен, отвечает ли это на ваш вопрос, но вы посмотрели на cPickle? https://docs.python.org/2/library/pickle.html –

+0

Сколько уровней находится в глубине этих словарей конфигурации? Вы можете попробовать файлы .ini и загрузить их с помощью парсера конфигурации python: https://docs.python.org/2/library/configparser.html – daveydave400

ответ

1

Вы пытаетесь программно сгенерировать модуль со значениями по умолчанию, которые могут изменить ваши пользователи? Что-то вроде этого может работать:

defaults = dict(val1="val1", val2=3) 
varname = 'MyModuleConfig' 
with open('myconfig.py', 'w') as fh: 
    fh.write('%s = %s\n' % (varname, repr(defaults))) 
    # Produced file should contain : 
    # MyModuleConfig = {'val2': 3, 'val1': 'val1'} 
+0

g.d.d.c: Это неловко. Я должен удалить свой вопрос в стыде, но вы заслуживаете того, чтобы указать на очевидное. Спасибо. –

+0

@JS. - Я поинтересовался. Не избивайте себя слишком много - каждый задает вопросы, которые кажутся чрезмерно очевидными после того, как ответ будет раскрыт. Это характер зверя. –

+0

Настоящий джентльмен. Еще раз спасибо. –

1

Если конфигурация - это то, что вам нужно. Вы можете посмотреть в ConfigParser или ConfigObj. Он просто опирается на простые ini-файлы, которые в значительной степени удобочитаемы для человека. Оттуда вы можете заставить программу интерпретировать необходимые данные. Конфигурационные файлы выглядеть так:

[Section 1] 
option1 = value1 
option2 = value2 

[Section 2] 
option1 = value1 
option2 = value2 

Оттуда вы можете просто прочитать его так:

options = ConfigParser() 
options.read(file) 

Опции затем будет рассматриваться похож на словарь. Вы также можете записать их так:

with open(file, "w+") as fs: 
    options.write(fs) 
Смежные вопросы