[파이썬] 파일의 특정 문자열 변수 치환

파이썬에서는 파일 내부의 특정 문자열을 다른 변수의 값으로 치환하는 기능을 제공합니다. 이 기능을 활용하면 파일 내용을 동적으로 변경하거나 템플릿을 채워 넣을 수 있습니다. 이번 글에서는 이러한 파일 문자열 변수 치환 방법에 대해 알아보겠습니다.

파일 내 특정 문자열 변수 치환하기

파일 내부의 특정 문자열 변수를 치환하는 가장 간단한 방법은 replace() 함수를 사용하는 것입니다. replace() 함수를 사용하면 원하는 문자열을 다른 문자열로 대체할 수 있습니다. 다음은 이를 실제 코드로 구현한 예제입니다.


def replace_string_variable(file_path, variable_name, new_value):
    # 파일 읽기
    with open(file_path, 'r') as f:
        file_data = f.read()
    
    # 변수 치환
    file_data = file_data.replace(variable_name, new_value)
    
    # 파일 쓰기
    with open(file_path, 'w') as f:
        f.write(file_data)

# 예제 사용
replace_string_variable('example.txt', '{{name}}', 'John Doe')

위의 예제에서는 replace_string_variable() 함수를 정의하고, 파일 경로, 변수 이름, 새로운 값으로 호출하고 있습니다. 이 함수는 주어진 파일 경로의 파일을 읽어서 변수 이름에 해당하는 문자열을 새로운 값으로 치환한 후, 다시 파일에 쓰는 작업을 수행합니다. 이를 통해 파일 내부의 특정 문자열 변수를 원하는 값으로 변경할 수 있습니다.

템플릿 엔진 활용하기

더 복잡한 템플릿을 사용하고 싶다면, 파이썬의 템플릿 엔진을 활용하는 것이 좋습니다. 템플릿 엔진은 파일에 특정한 형식의 변수를 두고, 그 변수를 동적으로 치환하여 파일을 생성할 수 있도록 도와줍니다. 다양한 템플릿 엔진 중에서는 Jinja2, Django 템플릿 엔진, Mustache 등이 있습니다.

다음은 Jinja2를 사용하여 템플릿을 활용하는 예제입니다.

from jinja2 import Template

def render_template(file_path, context):
    # 템플릿 파일 읽기
    with open(file_path, 'r') as f:
        template_data = f.read()
    
    # 템플릿 객체 생성
    template = Template(template_data)
    
    # 템플릿 렌더링
    rendered_template = template.render(context)
    
    # 렌더링된 템플릿을 파일에 쓰기
    with open(file_path, 'w') as f:
        f.write(rendered_template)

# 예제 사용
context = {
    'name': 'John Doe',
    'age': 30,
    'job': 'Software Engineer'
}
render_template('template.html', context)

위의 예제에서는 render_template() 함수를 정의하고, 파일 경로와 치환할 변수를 담은 컨텍스트를 인자로 받습니다. 함수 내부에서는 파일을 읽어서 Jinja2의 템플릿으로 만들고, 컨텍스트를 적용하여 렌더링한 후, 다시 파일에 쓰는 작업을 수행합니다. 이를 통해 템플릿 파일의 특정 변수를 동적으로 치환할 수 있습니다.

마무리

이번 글에서는 파일의 특정 문자열 변수 치환에 대해 알아보았습니다. 파일 내부의 특정 문자열을 다른 변수의 값으로 치환하는 방법을 배우고, 템플릿 엔진을 사용하여 템플릿을 채우는 방법을 알아보았습니다. 파일 내부의 특정 문자열 변수 치환은 파일 처리 작업에 매우 유용하며, 템플릿 엔진을 활용하면 보다 복잡하고 유연한 템플릿 작성이 가능합니다. 파이썬에서는 이러한 기능을 제공하기 때문에, 프로그래밍 작업을 효율적으로 수행할 수 있습니다.