해결된 질문
작성
·
347
1
def 필드삽입(index, value):
field_list = ["이름", "성별", "생일", "취미"]
for idx, field in enumerate(field_list):
hwp.PutFieldText(f"{field}{{{{{index}}}}}", value[idx])
이 코드에서 다음과 같이 필드 이름을 넣어야 하는 이유를 알려 주시면 감사하겠습니다. 결국 필드 이름만 필요한 것 같은데 index가 왜 필요하며 괄호의 갯수는 왜 여러개인지 잘 모르겠습니다.
{field}{{{{{index}}}}}
답변 2
2
인식님 안녕하세요?^^
말씀하신 중괄호 부분은 추가로 인덱스정보가 필요한 경우입니다.
쉽게 예를 들자면 아래와 같은 경우에 쓰이는 문법입니다.
"이름"이라는 필드가 문서 내에 10개가 있을 때, 각각 10개의 다른 이름을 넣어야 할 때
"번호"라는 필드가 문서 내에 100개가 있고 각각 1~100씩 다른 값을 주어야 할 때
이런 경우에 필드이름을 굳이 "이름1", "이름2", "이름3"이라고 지정하지 않고
"이름"이라는 중복된 이름으로 10개를 지정한 후에
첫 번째 "이름" 필드에만 값을 채우고 싶으면?
hwp.PutFieldText("이름{{0}}", "최인식")
라고 넣으면 "이름"이라는 여러 필드 중 첫 번째 필드에만 값이 채워집니다.
인덱스번호 좌우로 중괄호 두 겹이 쓰이는데, (이건 이해 되시죠?^^)
여기서 문제가 하나 발생합니다.
왜냐면 f스트링이 중괄호를 잡아먹어버리기 때문입니다.
그래서 아래 코드 예시 마지막처럼 다섯겹을 넣어야만 그 결과가 "이름{{1}}"이 되기 때문에
결과적으로 중괄호 다섯 겹을 넣는 것입니다.
아래 각 print문의 결과를 한 번 검토해 보시기 바랍니다^^
>>> n = 1
>>> print(f"이름{n}") # 1겹 : 일반 치환기능
이름1
>>> print(f"이름{{n}}") # 2겹. f-스트링 안에서 중괄호 두 겹은 문자그대로의 중괄호 한겹임.
이름{n}
>>> print(f"이름{{{n}}}") # 3겹 : 제일 안쪽 중괄호가 치환에 쓰이고 남은 두겹이 {}이 됨.
이름{1}
>>> print(f"이름{{{{n}}}}") # 4겹 : 치환되지 않고 리터럴한 문자열 중괄호 두 겹이 됨.
이름{{n}}
>>> print(f"이름{{{{{n}}}}}") # 5겹 : 안쪽 한겹은 치환되고, 바깥 네겹이 두겹의 리터럴중괄호가 됨.
이름{{1}} # 우리가 원한 결과! 그래서 다섯 겹이나 감싸야 함ㅜ
이 개떡같은 설명으로라도ㅜㅜㅜ
인식님의 이해에 도움이 되길 간절히 바랍니다.
행복한 하루 되세요^^
1