ConfigParser - Python 프로그램에 대한 사용자 편집 가능 설정 관리
목차
사용자가 구성할 수 있는 설정은 대규모 애플리케이션에 중요합니다. 응용 프로그램을 보다 사용자 친화적으로 만들고 응용 프로그램의 효율성을 향상시킵니다.
그러나 이러한 구성을 어디에 어떻게 저장하는지 궁금할 수 있습니다.
여기서는 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
섹션에 host
및 log
값이 포함되어 있습니까? 오타가 있습니까?아니요 아니요 아니요, 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')
읽어 주셔서 감사합니다! 😎
이 글이 도움이 되셨다면 커피 한 잔 사주세요!
Reference
이 문제에 관하여(ConfigParser - Python 프로그램에 대한 사용자 편집 가능 설정 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cycool29/configparser-manage-user-editable-settings-for-your-python-programs-3a88텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)