개요
AWS 자격증명파일, airflow.cfg 등과 같은 구성 파일은 .env 파일과 비슷한 형식인데 섹션 구분이 있다는 점이 조금 다르다. 확인해 보니 해당 파일 등은 configparser라는 라이브러리를 이용해 다룰 수 있는 것 같다.
사용 방법을 적어둔다.
예시 파일
이 글에서는 test.ini라는 파일로 저장한 아래 데이터를 예시로 글을 작성한다.
[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[forge.example]
User = hg
[topsecret.server.example]
Port = 50022
ForwardX11 = no
configparser 모듈 임포트
다음과 같이 import 하여 사용한다.
import configparser
파서 객체 생성
기본적으로 파서 객체를 생성한 뒤, 해당 객체가 제공하는 read 기능 등으로 데이터를 다루는 것 같다.
config = configparser.ConfigParser()
파일 읽기
객체의 read 함수를 이용해 파일을 읽는다.
config.read('/path/conf/file')
# 예시
config.read('test.ini')
sections 함수를 사용하면 섹션 목록을 확인할 수 있다. 단, DEFAULT 섹션은 출력되지 않는다.
print(f'sections: {config.sections()}')
options 함수를 사용하면 특정 섹션의 옵션 목록을 확인할 수 있다.
config.options("<SECTION>")
# 예시
print(f'forge.example options: {config.options("forge.example")}')
섹션과 섹션 내의 옵션에 접근하는 방법은 딕셔너리를 다룰 때와 크게 차이가 없다.
config["<SECTION>"]["<OPTION>"]
# 예시
print(f'forge.example.User : {config["forge.example"]["User"]}')
섹션 내 옵션에 접근할 때는 get 함수에 접근할 섹션과 옵션을 전달하여 사용해도 된다.
config.get("<SECTION>", "<OPTION>")
# 예시
print(config.get('DEFAULT', 'ForwardX11'))
파일 쓰기
파일을 쓸 때는 파서 객체의 섹션에 딕셔너리를 초기화하듯 데이터를 추가한 후, write 함수로 파일을 쓰면 된다.
import configparser
config = configparser.ConfigParser()
# 데이터 추가
config['user'] = {'name': 'james', 'age': 29}
# 파일로 저장
with open('test.ini', 'w') as f:
config.write(f)
문자열 읽기
만약 .ini 파일이 아니라 문자열 데이터를 읽어야 한다면 read_string 함수를 사용하면 된다.
import configparser
conf_string = """[user]
name = james
age = 29
"""
config = configparser.ConfigParser()
config.read_string(conf_string)
print(config.get('user', 'name'))
참고 문서
https://docs.python.org/ko/3/library/configparser.html