2013-10-15 4 views
3

У меня есть сценарий, который использует питона settings.cfg, который выглядит как:Файл конфигурации Помощь Слишком много значений, необходимых

[site1] 
url=http://boots4tall.com,http://myboots.com,http://boots.com,http://xbox.com,http://xboxOne.com 
category=Boots,Boots,Boots,Xbox,Xbox 

и функция питона сценария:

def main(): 
    config=ConfigParser.ConfigParser() 
    config.readfp(open("settings.cfg"),"r") 
    for site in config.sections(): 
     # ipdb.set_trace() 
     settings=dict(config.items(site)) 
     for (url,category) in zip(settings['url'].split(","),settings['category'].split(",")): 

Моя главная цель состоит в том, чтобы использовать специфический URL для конкретной категории. В большинстве случаев это 1-4 разных URL-адреса для 1 категории. Поэтому я выбираю URL-адрес категории 1 и позволяю сценарию делать что-либо, связанное с этой категорией url +.

Моя проблема: у меня 1200 категорий и около 3000 URL-адресов. Мне будет очень сложно вручную добавить эти категории + URL-адреса без ошибок в 1 строке, что очень сложно. Поэтому я прошу вас помочь, можете ли вы помочь получить лучшую систему? Я думал о чтении строк из текстовых файлов, например, 1 файл urls.txt 1 file category.txt? Как код должен даже искать такие вещи?

ответ

0

Попробуйте сохранить конфигурацию как json. На мой взгляд, гораздо проще создавать, загружать и читать, чем файлы конфигурации.

Вы можете создать JSON конфигурационный файл, как это:

[{'category': 'Boots', 'url': 'http://boots4tall.com'}, 
{'category': 'Boots', 'url': 'http://myboots.com'}, 
{'category': 'Boots', 'url': 'http://boots.com'}, 
{'category': 'Xbox', 'url': 'http://xbox.com'}, 
{'category': 'Xbox', 'url': 'http://xboxOne.com'} 
... 
] 

При загрузке файла конфигурации, вы можете итерацию по каждой паре категория/URL:

import json 

with open('config.json') as f: 
    pairs = json.load(f) 

for item in pairs: 
    category = item['category'] 
    url = item['url'] 
    # process them here... 

Если у вас есть список категорий и URL-адресов в Python, тогда легко получить такой конфигурационный файл:

import json 

pairs = [{'url': url, 'category': category} for (url, category) in zip(urls, categories))] 
with open('config.json', 'w') as f: 
    json.dump(pairs, f) 
+0

Скрипт работает в crontab, и когда он запускается, он должен проходить через все категории URL +. Я думаю, будет очень сложно создать для каждой категории и настроить файл конфигурации JSON. Самый простой способ, который я вижу, - это новая строка в текстовом файле. – JoJoMe

+0

Если у вас уже есть список этих категорий и URL-адресов на Python, их сериализацию в JSON не так уж сложно. Я добавлю пример. – nofinator

+0

У меня сейчас нет списка, похоже, что это хороший выбор, есть ли конвертер из текстового файла в JSON? Я могу упорядочить URL-адреса и категории в текстовый файл, возможно, а затем конвертировать в JSON, если возможно – JoJoMe

2

Учитывая, сколько категорий и URL-адресов вы используете/требуете, я бы использовал базу данных SQLite для хранения категорий и URL-адресов и их извлечения при необходимости. Да, это добавляет немного накладных расходов и больше кода, но его легче поддерживать и обновлять.

+0

Сценарий работает в cron и когда он запускается, он должен проходить через все категории URL +. Будет ли это просто реализовать? Я должен добавить URL + категории вручную. – JoJoMe

+0

Да, это необходимо, если права пользователя правильны, у вас не должно быть проблем. Сложная часть будет кодировать доступ SQLite, но поскольку хорошая документация в изобилии, это тривиальный процесс. Вы можете даже обновить базу данных SQLite (это на самом деле один файл) вживую, не останавливая cron, и она должна работать так же хорошо. – erKURITA

Смежные вопросы