ConfigParser - Python 프로그램에 대한 사용자 편집 가능 설정 관리

목차


  • What is ConfigParser?
  • What does a ConfigParser INI file look like?
  • How to read configs?
  • how to write configs?



  • 사용자가 구성할 수 있는 설정은 대규모 애플리케이션에 중요합니다. 응용 프로그램을 보다 사용자 친화적으로 만들고 응용 프로그램의 효율성을 향상시킵니다.

    그러나 이러한 구성을 어디에 어떻게 저장하는지 궁금할 수 있습니다.

    여기서는 Python 응용 프로그램의 설정을 저장하는 데 사용되는 Python 3의 표준 라이브러리 중 하나인 ConfigParser을 소개하겠습니다.

    ConfigParser가 정확히 무엇입니까? 🤔



    ConfigParser은 Python 프로그램의 기본 구성 언어를 구현하는 Python 3 표준 라이브러리(pip install configparser를 수행하여 Python2에 설치할 수 있음)입니다.
    ConfigParser에서 사용하는 파일 형식은 이전 버전의 Microsoft Windows에서 사용하는 형식과 유사한 INI 파일입니다.

    구성 파일은 섹션으로 구성되며 각 섹션에는 구성 데이터에 대한 이름-값 쌍이 포함될 수 있습니다. 섹션 이름은 [] 문자로 구분됩니다. 쌍은 : 또는 = 로 구분됩니다. 주석은 # 또는 ; 로 시작합니다.

    ConfigParser INI 파일은 어떤 모양인가요? 🧐



    official docs의 예가 완벽한 예라고 생각합니다.

    [Simple Values]
    key=value
    spaces in keys=allowed
    spaces in values=allowed as well
    spaces around the delimiter = obviously
    you can also use : to delimit keys from values
    
    [All Values Are Strings]
    values like this: 1000000
    or this: 3.14159265359
    are they treated as numbers? : no
    integers, floats and booleans are held as: strings
    can use the API to get converted values directly: true
    
    [Multiline Values]
    chorus: I'm a lumberjack, and I'm okay
        I sleep all night and I work all day
    
    [No Values]
    key_without_value
    empty string value here =
    
    [You can use comments]
    # like this
    ; or this
    
    # By default only in an empty line.
    # Inline comments can be harmful because they prevent users
    # from using the delimiting characters as parts of values.
    # That being said, this can be customized.
    
        [Sections Can Be Indented]
            can_values_be_as_well=True
            does_that_mean_anything_special=False
            purpose=formatting for readability
            multiline_values=are
                handled just fine as
                long as they are indented
                deeper than the first line
                of a value
            # Did I mention we can indent comments, too?
    


    그게 다야, 그렇지?

    ConfigParser INI 파일에서 구성을 읽는 방법은 무엇입니까? 📄



    이것은 우리가 사용하고 있는 샘플 INI 파일이며 이름을 configurations.ini로 지정합니다.

    [DEFAULT]
    host=localhost
    log=True
    
    [MySQL]
    PORT=4000
    user=john
    passwd=IDontwannatellyouhehe123
    
    [Postgresql]
    user=peter
    PORT=3000
    passwd=AnotherPasswd22223
    


    먼저 ConfigParser 모듈을 가져와서 ConfigParser 개체를 만들고 INI 파일에서 읽어야 합니다.

    import configparser
    
    configs = configparser.ConfigParser()
    configs.read('configurations.ini')
    


    이제 구성이 개체로 초기화됩니다. 그 안에 있는 값을 어떻게 할 수 있는지 봅시다:

    # Get a value from a section
    configs['Postgresql']['user'] # returns: 'peter'
    
    # Assign it to variable
    user = configs['Postgresql']['user']
    print(user) # returns: 'peter'
    


    INI 파일에 어떤 섹션이 있는지 확인하려면 다음을 수행하십시오.

    # List all sections in the INI file
    configs.sections() # returns: ['MySQL', 'Postgresql']
    
    # See specific section is in the INI file
    'MySQL' in configs # returns: True
    'NotExistingSection' in configs # returns: False
    


    섹션에서 모든 값 이름을 보려면 다음을 수행하십시오.

    for key in config['MySQL']:
        print(key)
    # Returns: 
    # port
    # user
    # passwd
    # host
    # log
    


    섹션의 값에 대한 사전을 생성할 수도 있습니다.

    configs.items('MySQL') # returns: [('host', 'localhost'), ('log', '1'), ('port', '4000'), ('user', 'john'), ('passwd', 'IDontwannatellyouhehe123')]
    


    이제 혼란스러울 수 있습니다. 왜 MySQL 섹션에 hostlog 값이 포함되어 있습니까? 오타가 있습니까?

    아니요 아니요 아니요, ConfigParser의 마법입니다. 값은 DEFAULT 섹션에 있으며(섹션 제목은 cAsE-sEnSiTiVe임) 다른 모든 섹션에 기본값을 제공하는 데 사용됩니다.

    글쎄, 당신이 알 수 있는 또 다른 것은 PORT 값이 소문자로 인쇄되는 이유입니다.

    값 이름은 대소문자를 구분하지 않고 모두 소문자로 저장되기 때문입니다.

    여기서 마지막 참고 사항: ConfigParser의 모든 값은 문자열로 저장됩니다.
    따라서 다른 데이터 형식이 되도록 하려면 수동으로 변환해야 합니다. 이를 위한 내장 함수가 있습니다.

    configs['MySQL'].get_boolean('log') # returns: True
    configs['MySQL'].get_int('port') # returns: 4000
    configs['MySQL'].get_float('port') # returns: 4000.0
    

    get_boolean()에 대한 팁 - 이 방법은 대소문자를 구분하지 않으며 'yes'/'no', 'on'/'off', 'true'/'false' 및 '1'/'0'의 부울 값을 인식합니다.

    좋아요... 이제 구성을 읽는 방법을 알고 있지만 구성을 INI 파일에 쓰는 방법은 무엇입니까? ✍



    매우 쉽습니다. 원하는 문자열을 할당하고 configurations.ini에 쓰기만 하면 됩니다!

    여기 있습니다 😎:

    # Assign the values you want 
    configs['MySQL']['user']='sam'
    
    # Or you can use the `set` method
    configs.set(section='Postgresql', option='log', value='False')
    
    # Write it to the file
    with open('configurations.ini', 'w') as configfile:
        configs.write(configfile)
    


    완료! 이제 설정이 configurations.ini에 기록됩니다.

    새 섹션을 원하거나 섹션 이름을 변경하려면 어떻게 해야 합니까?


    add_section를 사용하여 다음과 같이 새 섹션을 만들 수 있습니다.

    configs.add_section('New Section Name')
    


    음, 섹션의 이름을 직접 바꿀 수 있는 방법은 없습니다. 그러나 할 수 있는 일은 새 섹션을 만들고 새 섹션에 값을 복사하고 이전 섹션을 삭제하는 것입니다.

    # Create a new section
    configs.add_section('New Section')
    
    # Copy values to the new section
    for item in configs.items('MySQL'):
        configs.set('New Section', item[0], item[1])
    
    # Delete the new section
    configs.remove_section('MySQL')
    


    읽어 주셔서 감사합니다! 😎


    이 글이 도움이 되셨다면 커피 한 잔 사주세요!

    좋은 웹페이지 즐겨찾기