꽃무늬 키보드

[Python]ConfigParser사용하여 설정파일 읽어들이기 본문

Programming/python

[Python]ConfigParser사용하여 설정파일 읽어들이기

Katherine Choi 2014. 6. 26. 18:27

프로그램을 만들다보면, 상황에 따라 바꾸어 넣어주어야 하는 변수들이 있죠! 예를 들면 핸들링하려는 파일들의 절대주소라던지, 출력파일을 저장할 디렉토리의 주소, 혹은 특정 ip나 port,  계정, 패스워드 등등 이외에도 여러가지가 있을 거에요. 이와 같이 프로그램을 실행시킬 때마다 설정을 다르게 해주고 싶을 때! 바로 ConfigParser모듈이 아주 유용하답니다.  그렇다면 설정파일은 어떠한 형태로 이루어져있고, 그 설정파일을 어떻게 읽어와 적용하는지 알아보도록 할게요!



설정파일 만들기

먼저, 설정파일은 하나 이상의 섹션으로 이루어져 있습니다. 또한 각 섹션 아래에는 옵션과 그에 해당하는 값을 넣어주게 됩니다.

 <형식>

 [SECTION]

option = value

 <예제> 

 [MAIL_INFO]

 id = mail

 passwd = mail

 email = mail@info

 [SNS_INFO]

id = sns

passwd = sns

email = sns@info

 [MESSENGER_INFO]

id = messenger

passwd = messenger

email = messenger@info

설정 파일 안에서 주석을 넣어주기 위해서는 앞에 # 를 붙여주시면 되어요:-)



설정파일의 정보 읽어들이기

그러면 파이썬 코드 내부에서는 어떻게 해야 이 설정 파일의 정보를 읽어들일 수 있을까요?  방법은 아주 간단합니다.  

우선 ConfigParser를 임포트 하고, 설정파일을 읽어들인 후 ConfigParsesr.get 함수에 원하는 섹션과 옵션만 쓰면 끝!

아래 간단하게 예제를 보여드릴게요.


import ConfigParser
import sys  #모듈을 실행할 때 설정파일과 섹션을 입력으로 받아들이기 위해 sys를 임포트했어요!

section = sys.argv[1]  # 띄어쓰기를 구분으로 입력된 문자열의 두 번째 인자를 섹션으로 받아들여요.
conf_file = sys.argv[2]  # 마찬가지로 문자열의 세번 째 인자를 설정파일 네임으로 받아들여요

config = ConfigParser.ConfigParser()  # ConfigParser모듈의 객체를 넣을 변수를 config라고 만들었어요.
config.read(conf_file)  # 그리고 위에서 입력받은 conf_file(설정파일 이름)을 파라미터에 넣어 파일을 읽어들여요. 

sns_id = config.get(section, 'id')   # 이제 위에서 입력받은 section(섹션)에서 원하는 옵션(여기에서는 id)을 가져오게 됩니다.
sns_passwd = config.get(section, 'passwd') # 위와 마찬가지!

이렇게 sns_id와 sns_passwd를 print로 출력하면, 해당 설정파일의 섹션에 있는 옵션 값들이 쫘잔~



모듈 실행 스크립트

실행할 때에는 요렇게!

 $ python config.py SNS_INFO config.conf

                  [모듈명]       [섹션명]     [설정파일명]

위 코드에서 첫 번째 인자를 섹션으로, 두 번째 인자를 설정파일명으로 받았었죠. 실행할 때 반드시 순서를 맞추어 주어야 한다는 것!  그리고 만약 설정파일이 실행하고자 하는 모듈 파일과 같은 디렉토리에 존재하지 않는다면 반드시 절대주소와 함께 넣어주셔야 해요:-)

이런 설정파일 읽어들이는 과정은 주로 클래스 객체 생성 시, 초기화 할 때 많이 사용되지요~  그럼 마지막으로 ConfigParser를 이용하여 구현한 모듈의 일부(ConfigParser를 사용한 부분)를 보여드리면서 마치겠습니다. 


#!/bin/env/python
#-*- coding: utf-8-*-

import os
import sys
import ConfigParser

class configTest():
    def __init__(self,section,conf_file):
        section = section
        self.loadConfig(section,conf_file)
        self.flag = True

    def loadConfig(self,section,conf_file):
        if os.path.exists(conf_file)==False:
            raise Exception("%s file does not exist.\n" % conf_file)
   
        config = ConfigParser.ConfigParser()
        config.read(conf_file)
        self.outFile_path = config.get(section, 'outFile_path')
        self.inFile_path = config.get(section, 'inFile_path')


def main(section,conf_file):
    ct = configTest(section,conf_file)

def usage():
    print 'Usage : python %s {section} {config file}' %sys.arg[0]

if __name__=='__main__':
    if len(sys.argv) != 3:
        usage()
        sys.exit(1)
    section = sys.argv[1]
    conf_file = sys.argv[2]

    main(section,conf_file)


Comments