Python의 템플릿 클래스를 사용하여 파일 보고서 생성
소개
보고서 생성, 파일 또는 문자열 출력과 같은 작업을 수행해야 할 때가 많습니다. 그것들은 모두 어느 정도 패턴을 따르며, 종종 패턴이 너무 유사해서 재사용하고 데이터를 직접 공급할 수 있는 템플릿을 원합니다. 다행스럽게도 Python은 우리에게 도움이 될 수 있는 클래스인 string.Template을 제공합니다.
이 글에서는 이 클래스를 활용하여 현재 사용 중인 데이터를 기반으로 출력 파일을 생성하는 방법과 동일한 방식으로 문자열을 조작하는 방법을 알아봅니다. 따라서 일상적인 작업에서 접할 수 있는 예제를 사용하는 대신 이 문서에서는 보고서 파일을 생성하기 위해 이 클래스를 사용하는 것으로 알고 있는 여러 가지 실제 도구를 제공합니다. 시작하자!
참고: 이 문서는 Python 3.9.0(CPython)을 기반으로 합니다. GitHub(https://github.com/DahlitzFlorian/generate-file-reports-using-pythons-template-class)에서 이 문서 전체에 사용된 코드 예제를 찾을 수 있습니다.
예제를 보기 전에 다른 솔루션에 비해 string.Template을 사용할 때의 장점을 살펴보는 시간을 갖도록 하겠습니다.
1. 다른 종속성은 필요하지 않으며 기본적으로 작동하므로 pip install 명령을 사용하여 설치할 필요가 없습니다.
2. 가벼우며 물론 Jinja2, Mako 등의 템플릿 엔진이 널리 사용되었습니다. 그러나 이 문서에 제시된 시나리오에서는 이러한 기능이 과장되었습니다.
3. 문제 분리: 문자열 조작 및 보고서 생성을 코드에 직접 포함하는 대신 템플릿 파일을 사용하여 외부 위치로 이동할 수 있습니다. 보고서의 구조나 디자인을 변경하려는 경우 코드를 변경하지 않고도 템플릿 파일을 교환할 수 있습니다.
이러한 장점으로 인해 일부 잘 알려진 타사 라이브러리와 도구에서 이를 사용하고 있습니다. Wily가 그 예이며, 2018년 말 Wily의 발명자이자 유지관리자인 Anthony Shaw는 Wily에서 생성된 보고서의 출력 형식으로 HTML을 지원하기를 원했습니다.
예: 최고의 책에 대한 보고서 생성
Python의 내장 string.Template 클래스를 사용하는 동기를 논의한 후 첫 번째 실제 예를 살펴보겠습니다. 당신이 작년에 출판된 최고의 책에 대한 연례 보고서를 출판하는 회사에서 일한다고 상상해 보십시오. 2020년은 연례 보고서 외에도 지금까지 쓰여진 최고의 책 목록도 출판하기 때문에 특별한 해입니다.
이 시점에서는 데이터의 출처가 어디인지, 어떤 책이 목록에 포함되어 있는지는 중요하지 않습니다. 단순화를 위해 아래와 같이 저자 이름과 책 제목의 매핑을 포함하는 data.json이라는 JSON 파일이 있다고 가정해 보겠습니다.
{ "Dale Carnegie": "How To Win Friends And Influence People", "Daniel Kahneman": "Thinking, Fast and Slow", "Leo Tolstoy": "Anna Karenina", "William Shakespeare": "Hamlet", "Franz Kafka": "The Trial" }
이제 귀하의 임무는 다른 사람(예: 대형 잡지, 회사 또는 블로거)과 방식으로 공유하는 것입니다. 회사는 HTML 형식의 간단한 테이블이면 충분하다고 결정했습니다. 이제 문제는 이 HTML 테이블을 어떻게 생성하는가입니다.
물론 이 작업을 수동으로 수행하거나 각 책에 대한 자리 표시자를 만들 수 있습니다. 그러나 목록 내용이 확장되거나 구조 설계가 변경될 수 있으므로 나중에 보다 일반적인 버전을 갖는 것이 매우 바람직할 것입니다.
이제 Python의 string.Template 클래스를 활용할 수 있습니다! 아래와 같이 실제 템플릿을 만드는 것부터 시작합니다. 여기서는 template.html 파일을 호출합니다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Great Books of All Time</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous"> </head> <body> <h1 id="Great-Books-of-All-Time">Great Books of All Time</h1> <table > <thead> <tr> <th scope="col">#</th> <th scope="col">Author</th> <th scope="col">Book Title</th> </tr> </thead> <tbody> ${elements} </tbody> </table> </body> </html>
문서 자체가 매우 초보적입니다. 우리는 최종 테이블의 기본 구조를 스타일링하고 생성하기 위해 부트스트랩을 사용했습니다. 헤더가 포함되어 있지만 데이터가 여전히 누락되었습니다. tbody 요소 내에서 자리 표시자 ${elements}는 나중에 책 목록을 삽입할 위치를 표시하는 데 사용됩니다.
원하는 출력을 생성하는 Python 스크립트를 구현하도록 모두 설정되었습니다! 따라서 현재 작업 디렉터리에 report.py라는 새 Python 파일을 만듭니다. 먼저, 필요한 두 개의 내장 모듈을 가져오고 JSON 파일에서 데이터를 로드합니다.
# report.py import json import string with open("data.json") as f: data = json.loads(f.read())
이제 데이터 변수는 저자 이름(키)과 책 제목(값)을 키-값 쌍으로 포함하는 사전입니다. 다음으로 HTML 테이블을 생성하여 템플릿에 넣습니다(자리 표시자 기억하시나요?). 따라서 빈 문자열을 초기화하고 아래와 같이 새 테이블 행을 추가합니다.
content = "" for i, (author, title) in enumerate(data.items()): content += "<tr>" content += f"<td>{i + 1}</td>" content += f"<td>{author}</td>" content += f"<td>{title}</td>" content += "</tr>"
이 코드 조각은 데이터 사전의 모든 항목을 반복하고 책 제목과 저자 이름을 해당 HTML 태그에 배치하는 것을 보여줍니다. 우리는 최종 HTML 테이블을 만들었습니다. 다음 단계에서는 이전에 생성한 템플릿 파일을 로드해야 합니다.
with open("template.html") as t: template = string.Template(t.read())
string.Template은 파일 경로가 아닌 문자열을 허용합니다. 따라서 파일에 저장하지 않고도 프로그램에서 이전에 생성한 문자열을 제공할 수도 있습니다. 우리의 경우 template.html 파일의 내용을 제공합니다.
마지막으로 템플릿의 replacement() 메서드를 사용하여 자리 표시자 요소를 변수 콘텐츠에 저장된 문자열로 바꿉니다. 이 메서드는 문자열을 반환하며 이를 final_output 변수에 저장합니다. 마지막으로, report.html이라는 새 파일을 만들고 해당 파일에 최종 출력을 작성합니다.
final_output = template.substitute(elements=content) with open("report.html", "w") as output: output.write(final_output)
现在已经生成了第一个文件报告!如果在浏览器中打开report.html文件,则可以看到结果。
safe_substitution()方法
现在,您已经构建了第一个string.Template用例,在结束本文之前,我想与您分享一个常见情况及其解决方案:安全替换。它是什么?
让我们举个例子:您有一个字符串,您想在其中输入一个人的名字和姓氏。您可以按照以下步骤进行操作:
# safe_substitution.py import string template_string = "Your name is ${firstname} ${lastname}" t = string.Template(template_string) result = t.substitute(firstname="Florian", lastname="Dahlitz") print(result)
但是,如果您错过传递一个或另一个的值会怎样?它引发一个KeyError。为避免这种情况,我们可以利用safe_substitution()方法。在这种情况下,safe意味着Python在任何情况下都尝试返回有效字符串。因此,如果找不到任何值,则不会替换占位符。
让我们按以下方式调整代码:
# safe_substitution.py import string template_string = "Your name is ${firstname} ${lastname}" t = string.Template(template_string) result = t.safe_substitute(firstname="Florian") print(result)# Your name is Florian ${lastname}
在某些情况下,这可能是一个更优雅的解决方案,甚至是必须的行为。但是这可能在其他地方引起意外的副作用。
本文概要
在阅读本文时,您不仅学习了Python字符串的基本知识。Template类以及使用它的原因,而且还实现了第一个文件报告脚本!此外,您已经了解了safe_substitution()方法以及在哪种情况下使用它可能会有所帮助。
위 내용은 Python의 템플릿 클래스를 사용하여 파일 보고서 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











XML 미화는 합리적인 압입, 라인 브레이크 및 태그 구성을 포함하여 기본적으로 가독성을 향상시키고 있습니다. 원칙은 XML 트리를 가로 지르고 레벨에 따라 들여 쓰기를 추가하고 텍스트가 포함 된 빈 태그와 태그를 처리하는 것입니다. Python의 xml.etree.elementtree 라이브러리는 위의 미화 프로세스를 구현할 수있는 편리한 Pretty_XML () 기능을 제공합니다.

대부분의 텍스트 편집기를 사용하여 XML 파일을여십시오. 보다 직관적 인 트리 디스플레이가 필요한 경우 Oxygen XML 편집기 또는 XMLSPy와 같은 XML 편집기를 사용할 수 있습니다. 프로그램에서 XML 데이터를 처리하는 경우 프로그래밍 언어 (예 : Python) 및 XML 라이브러 (예 : XML.etree.elementtree)를 사용하여 구문 분석해야합니다.

XML 컨텐츠를 수정하려면 프로그래밍이 필요합니다. 대상 노드를 추가, 삭제, 수정 및 확인하려면 정확한 찾기가 필요하기 때문입니다. 프로그래밍 언어에는 XML을 처리하기위한 해당 라이브러리가 있으며 운영 데이터베이스와 같이 안전하고 효율적이며 제어 가능한 작업을 수행 할 수있는 API를 제공합니다.

XML을 PDF로 직접 변환하는 응용 프로그램은 근본적으로 다른 두 형식이므로 찾을 수 없습니다. XML은 데이터를 저장하는 데 사용되는 반면 PDF는 문서를 표시하는 데 사용됩니다. 변환을 완료하려면 Python 및 ReportLab과 같은 프로그래밍 언어 및 라이브러리를 사용하여 XML 데이터를 구문 분석하고 PDF 문서를 생성 할 수 있습니다.

모바일에는 간단하고 직접 무료 XML에서 PDF 툴이 없습니다. 필요한 데이터 시각화 프로세스에는 복잡한 데이터 이해 및 렌더링이 포함되며 시장에있는 소위 "무료"도구의 대부분은 경험이 좋지 않습니다. 컴퓨터 측 도구를 사용하거나 클라우드 서비스를 사용하거나보다 신뢰할 수있는 전환 효과를 얻기 위해 앱을 개발하는 것이 좋습니다.

모바일 XML에서 PDF의 속도는 다음 요인에 따라 다릅니다. XML 구조의 복잡성. 모바일 하드웨어 구성 변환 방법 (라이브러리, 알고리즘) 코드 품질 최적화 방법 (효율적인 라이브러리 선택, 알고리즘 최적화, 캐시 데이터 및 다중 스레딩 사용). 전반적으로 절대적인 답변은 없으며 특정 상황에 따라 최적화해야합니다.

휴대 전화에서 XML을 PDF로 직접 변환하는 것은 쉽지 않지만 클라우드 서비스를 통해 달성 할 수 있습니다. 가벼운 모바일 앱을 사용하여 XML 파일을 업로드하고 생성 된 PDF를 수신하고 클라우드 API로 변환하는 것이 좋습니다. Cloud API는 Serverless Computing Services를 사용하고 올바른 플랫폼을 선택하는 것이 중요합니다. XML 구문 분석 및 PDF 생성을 처리 할 때 복잡성, 오류 처리, 보안 및 최적화 전략을 고려해야합니다. 전체 프로세스에는 프론트 엔드 앱과 백엔드 API가 함께 작동해야하며 다양한 기술에 대한 이해가 필요합니다.

XML 이미지를 먼저 변환하려면 먼저 XML 데이터 구조를 결정한 다음 Python의 Matplotlib와 같은 적절한 그래픽 라이브러리를 선택하고 데이터 구조를 기반으로 시각화 전략을 선택하고 데이터 볼륨 및 이미지 형식을 고려하고 효율적인 라이브러리를 수행하거나 필요에 따라 PNG, JPEG 또는 SVG로 저장하십시오.
