파이썬 표준 라이브러리의 configparser 모듈은 마이크로소프트 윈도우 운영체제에서 사용되는 방식의 구성(설정) 파일을 읽고 쓰는 기능을 제공합니다. 이러한 설정 파일은 일반적으로 .INI 확장자를 사용하며, 프로그램의 환경설정 정보를 사람이 읽기 쉬운 형태로 저장하는 데 널리 활용됩니다.
INI 파일의 기본 구조
INI 파일은 여러 개의 섹션(section)으로 구성되며, 각 섹션은 대괄호 [section] 형태의 헤더로 시작합니다. 대괄호 안에는 섹션의 이름을 지정하고, 그 아래에 = 또는 : 문자로 구분된 키(key)/값(value) 항목들을 나열합니다. 또한 # 또는 ; 기호로 시작하는 주석을 포함할 수 있습니다.
다음은 전형적인 INI 파일의 예시입니다.
[Settings] # 추가 디버깅 정보를 위한 상세 로그 설정 DetailedLog=1 RunStatus=1 StatusPort=6090 StatusRefresh=10 Archive=1 # MV_FTP 로그 파일 위치 지정 LogFile=/opt/ecs/mvuser/MV_IPTel/log/MV_IPTel.log Version=0.9 Build 4 ServerName=Unknown [FTP] # FTP 서버 활성화 RunFTP=1 # FTP 제어 포트 정의 FTPPort=21 # FTP 데이터 디렉터리 위치 지정 FTPDir=/opt/ecs/mvuser/MV_IPTel/data/FTPdata # 관리자 이름 설정 UserName=admin # 비밀번호 설정 Password=admin
ConfigParser 클래스 소개
configparser 모듈의 핵심인 ConfigParser 클래스는 구성 파일 목록을 파싱(parsing)하고, 파싱된 데이터를 관리하는 역할을 담당합니다.
ConfigParser 객체는 다음과 같은 문장으로 생성합니다.
parser = configparser.ConfigParser()
ConfigParser의 주요 메서드
| sections() | 모든 구성 섹션 이름을 반환합니다. |
| has_section() | 지정한 섹션이 존재하는지 여부를 반환합니다. |
| has_option() | 지정한 섹션 내에 해당 옵션이 존재하는지 여부를 반환합니다. |
| options() | 지정한 섹션의 구성 옵션 목록을 반환합니다. |
| read() | 지정한 구성 파일을 읽고 파싱합니다. |
| read_file() | 파일 객체로 전달된 하나의 구성 파일을 읽고 파싱합니다. |
| read_string() | 주어진 문자열에서 구성 정보를 읽어 들입니다. |
| read_dict() | 딕셔너리에서 구성 정보를 읽습니다. 키는 섹션 이름이 되고, 값은 해당 섹션에 있어야 할 키와 값으로 이루어진 딕셔너리입니다. |
| get() | 지정한 옵션의 값을 문자열로 반환합니다. |
| getint() | get()과 유사하지만, 값을 정수형(int)으로 변환하여 반환합니다. |
| getfloat() | get()과 유사하지만, 값을 실수형(float)으로 변환하여 반환합니다. |
| getboolean() | get()과 유사하지만, 값을 불리언(boolean)으로 변환하여 True 또는 False를 반환합니다. |
| items() | 섹션 내 각 옵션에 대해 (이름, 값) 튜플의 목록을 반환합니다. |
| remove_section() | 지정한 섹션과 그 안의 모든 옵션을 제거합니다. |
| remove_option() | 지정한 섹션에서 해당 옵션을 제거합니다. |
| set() | 지정한 옵션의 값을 설정합니다. |
| write() | 구성 상태를 .ini 형식으로 파일에 기록합니다. |
실습 1: INI 파일 읽고 파싱하기
다음 스크립트는 'sampleconfig.ini' 파일을 읽고 파싱한 뒤, 각 섹션과 그 안의 키/값 쌍을 화면에 출력합니다.
import configparser
parser = configparser.ConfigParser()
parser.read('sampleconfig.ini')
for sect in parser.sections():
print('Section:', sect)
for k,v in parser.items(sect):
print(' {} = {}'.format(k,v))
print()실행 결과
Section: Settings detailedlog = 1 runstatus = 1 statusport = 6090 statusrefresh = 10 archive = 1 logfile = /opt/ecs/mvuser/MV_IPTel/log/MV_IPTel.log version = 0.9 Build 4 servername = Unknown Section: FTP runftp = 1 ftpport = 21 ftpdir = /opt/ecs/mvuser/MV_IPTel/data/FTPdata username = admin password = admin
출력 결과에서 알 수 있듯이, configparser는 기본적으로 모든 키를 소문자로 변환하여 저장한다는 점에 유의하세요.
실습 2: 구성 파일 생성하기
write() 메서드를 사용하면 새로운 구성 파일을 만들 수 있습니다. 다음 스크립트는 파서 객체에 새 섹션과 옵션들을 설정한 후, 'test.ini' 파일 객체에 기록합니다.
import configparser
parser = configparser.ConfigParser()
parser.add_section('Manager')
parser.set('Manager', 'Name', 'Ashok Kulkarni')
parser.set('Manager', 'email', 'ashok@gmail.com')
parser.set('Manager', 'password', 'secret')
fp=open('test.ini','w')
parser.write(fp)
fp.close()이처럼 configparser 모듈을 활용하면 복잡한 설정 정보를 코드와 분리하여 관리할 수 있으며, 애플리케이션의 유연성과 유지보수성을 크게 향상시킬 수 있습니다.