Редактировать значения параметров ini-файла с помощью ConfigParser (Python)

Кто-нибудь знает, как бы я отредактировал ini значения файла, желательно с помощью ConfigParser? (Или даже место, с которого можно начать, было бы здорово!) У меня много комментариев в моем файле конфигурации, поэтому я хотел бы сохранить их, просто отредактировав значения, не принимая значения и играя с несколькими файлами.

Структура моего файла конфигурации:

[name1]
URL = http://example.com
username = dog
password = password

[name2]
URL = http://catlover.com
username = cat
password = adffa

Как видите, у меня одинаковые параметры для разных имен разделов, поэтому редактировать значения только для одного раздела немного сложнее, если ConfigParser не может этого сделать.

Заранее спасибо.

1
задан Daniel A. White 12 May 2015 в 14:09
поделиться

1 ответ

Вот пример

import sys
import os.path
from ConfigParser import RawConfigParser as ConfParser
from ConfigParser import Error

p = ConfParser()
# this happend to me save as ASCII
o = open("config.ini")
if o.read().startswith("\xef\xbb\xbf"):
    print "Fatal Error; Please save the file as ASCII not unicode."
    sys.exit()
try:
    results = p.read("config.ini")
except Error, msg:
    print "Error Parsing File"
    print msg
else:
    if results == []:
        print "Could not load config.ini."
        if not os.path.exists("config.ini"):
            print "config.ini does not exist."

        else:
            print "An uknown error occurred."

    else:
        print "Config Details"
        sections = p.sections()
        sections.sort()
        for s in sections:
            print "------------------------"
            print s
            if p.has_option(s, "URL"):
                print "URL: ",
                print p.get(s, "URL")

            else:
                print "URL: No Entry"

            if p.has_option(s, "username"):
                print "User: ",
                print p.get(s, "username")

            else:
                print "User: N/A"

            if p.has_option(s, "password"):
                print "Password: ",
                print p.get(s, "password")

            else:
                print "Password: N/A"

Также я создал этот класс для хранения переменных моих приложений и т. Д., А также для облегчения написания конфигурации. Первоначально он использовался с twisted, но я создал простую замену регистратора

import os.path
import sys
#from twisted.python import log
import ConfigParser
from traceback import print_last
class Log(object):

    def msg(t):
        print "Logger: %s " % t

    def err(t = None):
        print "-------------Error-----------"
        print "\n\n"
        if t is None:
            print_last()
# sloppy replacement for twisted's logging functions
log = Log()            
class Settings(object):
    '''Stores settings'''
    config_variables = ['variables_that_should_be_stored_in_config']
    def __init__(self, main_folder = None, log_file = None, music_folder = None ):
        # load the defaults then see if there are updates ones in the config 
        self.load_defaults()
        self.config = ConfigParser.RawConfigParser()
        if len(self.config.read(self.settings_file)) == 1:
            if 'Settings' in self.config.sections():
                try:
                    self.music_folder = self.config.get('Settings', 'music_folder')
                except ConfigParser.NoOptionError:
                    pass
                log.msg('Music Folder: %s' % self.music_folder)
                try:
                    self.mplayer = self.config.get('Settings', 'mplayer')
                except ConfigParser.NoOptionError:
                    pass
                try:
                    self.eula = self.config.getboolean('Settings', 'eula')
                except ConfigParser.NoOptionError:
                    pass
            else:
                log.msg('No Settings Section; Defaults Loaded')
        else:
            log.msg('Settings at default')
    def load_defaults(self):
        log.msg('Loading Defaults')
        self.main_folder = os.path.dirname(os.path.abspath(sys.argv[0]))
        self.settings_file = os.path.join(self.main_folder, 'settings.cfg')
        self.log_file = os.path.join(self.main_folder, 'grooveshark.log')
        self.music_folder = os.path.join(self.main_folder, 'Music')
        self.grooveshark_started = False
        self.eula = False
        self.download_percent = 0.5# default buffer percent is 50 % 
        if sys.platform == 'win32' or sys.platform == 'cygwin':# Windows
            if os.path.exists( os.path.join(self.main_folder, 'mplayer', 'mplayer.exe') ):
                self.mplayer = os.path.join(self.main_folder, 'mplayer', 'mplayer.exe')
            elif os.path.exists( os.path.join(self.main_folder, '/mplayer.exe') ):
                self.mplayer = os.path.join(self.main_folder, '/mplayer.exe') 
            else:
                self.mplayer = 'download'

        elif sys.platform == 'darwin':# Mac
            if os.path.exists( os.path.join(self.main_folder, 'mplayer/mplayer.app') ):
                self.mplayer = os.path.join(self.main_folder, 'mplayer/mplayer.app')
            elif os.path.exists( os.path.join(self.main_folder, '/mplayer.app') ):
                self.mplayer = os.path.join(self.main_folder, '/mplayer.app') 
            else:
                self.mplayer = 'download'
        else:# linux
            # download or navigate to it
            self.mplayer = 'download'

        # Create Music Folder if it does not exist
        if not os.path.exists(self.music_folder):
            os.makedirs(self.music_folder)
        # Create log file if it does not exist
        if not os.path.exists(self.log_file):
            l = open(self.log_file, 'wb')
            l.close()

        log.msg('Application Folder: %s' % self.main_folder)
        log.msg('Log File: %s' % self.log_file)
        log.msg('Music Folder: %s' % self.music_folder)

    def __setattr__(self, variable, value):
        log.msg('Setting %s to %s' % (variable, value))
        object.__setattr__(self, variable, value)
        if variable in self.config_variables:
            try:
                self.config.set('Settings', variable, value)
            except:
                # Means config wasn't created then, could be we were trying to set self.config (in which case self.config wasn't set yet because we were trying to set it)
                log.err()
            else:
                # UPDATE settings file
                log.msg('Saving Settings to %s' % (self.settings_file))
                try:
                    self.config.write( open(self.settings_file, 'wb') )
                except:
                    log.err()
2
ответ дан 2 September 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: