Python

[Python] configparser - .ini 파일 읽기

비번변경 2024. 2. 12. 00:52

개요

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

 

 

728x90