설정 파일 안에 프로그램을 돌리는데 필요한 모든 초기 변수를 저장해 놓으면 나중에 옵션을 수정하기 매우 간편하다. 특히, 여러 옵션을 변경하면서 시도해 봐야 하는 ML/AI 모델이나 시뮬레이터 등을 돌리려고 할 때, 설정 파일을 만들어주면 클린 코드 작성이 가능하며, 수정하기도 편리해진다.
프로젝트 구조
우선 프로젝트 안에 config.ini
파일을 만들어 준다. 이 파일은 main.py 같은 파이썬 스크립트에서 configparser
클래스를 통해서 사용 가능하다. config.ini
파일의 경로를 설정해줄 수 있기 때문에 어떤 모듈에 파이썬 스크립트가 있든 간에 사용 가능하다.
project_root/
│
├── config.ini
│
└── module_name/
└── main.py
config.ini 파일 형식
config.ini
파일은 설정 정보를 저장하는 데 사용되는 구성 파일이다. 파일 이름에서 "ini"은 "Initialization"을 나타내며, 초기 설정 정보를 간단하게 저장하는 데에 사용되는 텍스트 파일 형식 중 하나이다. 일반적으로 config.ini 파일은 섹션(section)과 각 섹션에 속하는 키-값 쌍으로 이루어져 있다. 섹션은 대괄호([]
)로 둘러싸인 이름을 가지며, 각 키-값 쌍은 key = value 형식으로 기록된다.
[default] # 섹션은 대괄호로 구분
value_1 = True # key-value 쌍
value_2 = 1
value_3 = 1.0
value_4 = yes
[section_name] # 섹션 이름은 대소문자 구분하지 않음
value_1 = Flase
value_2 = 0
value_3 = 0.0
value_4 = no
다른 모든 섹션은 마음대로 이름을 지어도 되지만, [DEFAULT]
섹션은 특별한 섹션으로 간주된다. 이 섹션에 포함된 키-값 쌍은 다른 섹션에 해당 키가 없을 때 사용되는 기본값을 정의하는 데 사용된다(참고로 ini 파일에서는 섹션 이름 및 키 이름 모두 대소문자를 구분하지 않는다. [DEFAULT]
, [default]
둘 다 가능하다).
configparser 사용법
.py 파일(파이썬 파일)에서 configparser
클래스를 사용하면 config.ini 파일에 변수를 저장할 수 있다. configparser를 통해 config.ini 파일을 딕셔너리처럼 사용하는 것이 가능하다.
import configparser
config = configparser.ConfigParser() # 유니코드 문자열로 처리
config = configparser.RawConfigParser() # 유니코드 문자열 처리를 하지 않음
# config.ini에 특정 값을 설정
config['DEFAULT'] = {'value_1': 'True',
'value_2': '1',
'value_3': '1.0'}
config['DEFAULT']['value_4'] = 'yes'
with open('config.ini', 'w') as configfile:
config.write(configfile)
또한 이미 config.ini 파일에 변수를 저장해 두었으면 py 파일(파이썬 파일)에서 불러오는 것도 가능하다.
import configparser
config = configparser.ConfigParser() # 유니코드 문자열로 처리
config = configparser.RawConfigParser() # 유니코드 문자열 처리를 하지 않음
config.read('/path/to/configfile/config.ini')
# 특정 섹션의 특정 변수만 가지고 오기
config['DEFAULT']['value_1']
config['DEFAULT']['value_2']
# 특정 섹션의 전체 키-값 쌍을 딕셔너리로 가져옴
section_dict = dict(config.items('section_name'))
여기서 중요한 점은 configparser
는 구성 파일에 있는 값의 데이터형을 추측하지 않고, 항상 내부적으로 문자열로 저장한다는 점이다. 따라서 다른 데이터형이 필요하다면 직접 변환해주어야 한다.
int(config['DEFAULT']['value_2']) # int 값으로 가져오기
float(config['DEFAULT']['value_3']) # float 값으로 가져오기
참고: configparser 관련 python 공식 문서
'🖥️Languages > 🐍Python' 카테고리의 다른 글
[파이썬] Python의 자료형(NoneType, int, float, complex, bool, str, list, tuple, set, dict, function) (0) | 2023.01.11 |
---|