2013-08-06 4 views
0

У меня есть следующий список в моем питоне модуля:Python argparser. Список Dict в INI

couples = [("somekey1", "somevalue1"), ("somekey2", "somevalue2"), ("somekey3", "somevalue3"),....] 

Я хранение конфигурации для моего приложения в «configs.ini», и я использую ConfigParser тора читать. Я проверил документацию для configparser и не нашел, как я могу прочитать мой список из файла.

UPD: Кто-нибудь знает, как я могу прочитать следующий список из моих конфигов или, может быть, существует еще один способ сохранить его в файл?

UPD2: это список логинов и пароля. Возможно, это поможет.

+0

Извините, смотрите upd. Мне нужно прочитать его из файла, а не хранить. – Vetalll

+0

Действительно ли это файл конфигурации? Или просто постоянное хранилище данных, с которым пользователям не нужно напрямую взаимодействовать? – roippi

+0

Это действительно конфиг для моего приложения. Модули Pyhton открыты. пользователь может записать некоторые данные в мой модуль. Но я хочу хранить его в конфигах. – Vetalll

ответ

1

Я не уверен, я понимаю, это правильно, но если вы хотите создать конфигурационный файл, чтобы легко прочитать список как вы показали затем создать раздел в вашем configs.ini

[section] 
key = value 
key2 = value2 
key3 = value3 

, а затем

>> config = ConfigParser.RawConfigParser() 
>> config.read('configs.ini') 
>> items = config.items('section') 
>> items 
[('key', 'value'), ('key2', 'value2'), ('key3', 'value3')] 

который в основном то, что вы говорите, что вам нужно.

Если с другой стороны, то, что вы говорите, что ваш конфигурационный файл содержит:

[section] 
couples = [("somekey1", "somevalue1"), ("somekey2", "somevalue2"), ("somekey3", "somevalue3")] 

что вы могли бы сделать, это продлить конфигурационный парсер, как, например, так:

class MyConfigParser(ConfigParser.RawConfigParser): 

    def get_list_of_tups(self, section, option): 
     value = self.get(section, option) 
     import re 
     couples = re.finditer('\("([a-z0-9]*)", "([a-z0-9]*)"\)', value) 
     return [(c.group(1), c.group(2)) for c in couples] 

, а затем ваш новый парсер может получить ваш список для вас:

>> my_config = MyConfigParser() 
>> my_config.read('example.cfg') 
>> couples = my_config.get_list_of_tups('section', 'couples') 
>> couples 
[('somekey1', 'somevalue1'), ('somekey2', 'somevalue2'), ('somekey3', 'somevalue3')] 

Вторая ситуация Думаю, я просто делаю все для себя.

+0

Спасибо. Я думаю, что может использовать первую часть вашего ответа. – Vetalll

0

Вы можете использовать модуль рассола для выгрузки и загрузки вашего списка в файл.

Чтобы сбросить список:

import pickle 

couples = [("somekey1", "somevalue1"), ("somekey2", "somevalue2"), ("somekey3", "somevalue3"),....] 

pickle.dump(couples, open("save.p", "wb")) 

Для загрузки списка:

couples = pickle.load(open("save.p", "rb")) 
+0

Должен ли он записываться в файл перед чтением с рассолом? Могу ли я сохранить его без сериализации и читать с рассолом? – Vetalll

+0

Да, вы должны сбрасывать свой список, используя рассол, и читать с него, используя рассол. Вы также можете сбросить свой список, используя два столбца, один для ключа и другой для значения, если хотите. – jh314

+0

Просто убедитесь, что голова Pickle Best Practices. В соответствии с документацией никогда не распечатывайте данные, полученные от ненадежного или не прошедшего проверку подлинности источника. – Rejected

0

Что вы ищете, вероятно, configparser модуль. Проверьте эти ссылки для получения более подробной информации:

1) How to read and write INI file with Python3?

2) http://docs.python.org/2.7/library/configparser.html#examples

+0

Анализатор конфигурации не может решить мою проблему. Я использую его. Но я не нашел никаких решений. – Vetalll