본문 바로가기
Integration & Python

디렉토리에서 마크 다운 텍스트 생성 HTML로 변환 프로그램

by 누워서 코딩 2021. 6. 22.

이 전 포스팅에서는 마크다운 텍스트 파일을 HTML로 변환하는 코드를 작성하는 실습을 했습니다. 이번 포스팅은 파이썬 디렉토리(directory)에서 마크 다운 텍스트를 생성 후 마크다운 파일(.md) 생성 후 HTML로 변환하는 프로그램을 만들어 보겠습니다.'

 

 

파이썬-마크다운 설치, 패키지 사용법

파이썬 환경에서 마크다운(Markdown) 패키지 설치도 가능합니다. 마크다운이 뭔지 잘 모르시면 제 블로그 상의 아래 링크 참조해 보세요. 마크다운(Markdown) 쉽게 따라하기 1. 마크다운 이란? 2004년 UI

freernd.tistory.com

 

디렉토리에서 마크 다운 생성 HTML로 변환

 

다음 단계로 진행해 봅니다.

Step 1. 파이썬 디렉토리(directory)에서 마크다운 텍스트를 생성 후 마크다운 파일에 저장한다.

 

 

다음과 같은 파이썬 코드를 작성합니다.

import markdown

manufacture_models = {'Mercedes' : ['S class', 'E class', 'C class', 'A class'],                  
                      'BMW' : ['7 serise', '5 serise', '3 serise', '1 serise'],                  
                      'Audi' : ['A7', 'A5', 'A3', 'A1'],                  
                      }

import로 markdown 라이브러리를 가져옵니다. 그리고 manufacture_models 변수에 몇 개의 자동차 제조사를 키로 포함하는 사전(directory)을 정의합니다. 이 예제는 각 제조사 3개의 목록을 값으로 정의했습니다. 

이로서 데이터를 보관하는 directory가 구성되었습니다.

 

Step 2. markdown.markdownFromFile() 함수를 사용으로 생성한 마크다운 텍스트 파일을 HTML로 변환한다.

 

 

다음으로 정의한 directory 뒷부분에 다음 코드를 추가했습니다.

 

. . .
with open('models.md', 'bw+') as f:
    for manufacture, models in manufacture_models.items():
         f.write('# {}\n'.format(manufacture).encode('utf-8'))
         for model in models:
              f.write('* {}\n'.format(model).encode('utf-8'))
    f.seek(0)
    markdown.markdownFromFile(input=f, output='manufactures.html')

manufactures.md라는 존재하지 않는 파일을 엽니다. 이때 'bw'옵션으로, 쓰기 및 읽기('w')가 가능한 바이너리 모드('b')로 열었습니다.

 

그다음 항목을 검색해서 제조사 이름을 포함하는 각 키들을 추출합니다. 그리고 manufacture 변수에 저장합니다.

또한 각 제조사의 모델별 목록 값들도 추출해서 models변수에 저장합니다.

 

첫 번째 루프 문에서는 # Markdown 헤더인 (<h1> html 태그)를 models.md에 씁니다.

특수 문자인 \n로 새 줄을 삽입합니다. 바이너리 모드로 열었기 때문에 .encode() 를 사용합니다.

두 번째 for 루프로 각 모델들을 반복해서 마크 다운 파일에 * 목록 아이템에 해당하는 (<li> HTML 태그)을 씁니다.

 

첫 번째 루프가 끝나게 되면 파일의 끝으로 이동하지만, markdown.markdownFromFile() 오르는 갈 수 없습니다. 즉 f.seek(0)로 이동되었다는 의미로 다시 파일의 처음(맨 위)으로 돌아갑니다. 결과적으로 f 객체를 markdown.markdownFromFile()에 입력으로 전달하기 전에 HTML로 변환합니다. 그리고 호출된 새 파일 cities.html로 변환한 내용을 저장합니다. 

 

완료되었으면 저장하고 닫고, 실행해 보겠습니다.

 

models.md: manufacture의 model들이 포함된 Markdown 파일

# Mercedes
* S class
* E class
* C class
* A class
# BMW
* 7 serise
* 5 serise
* 3 serise
* 1 serise
# Audi
* A7
* A5
* A3
* A1

 

markdown.markdownFromFile 사용
markdown.markdownFromFile 사용

 

models.html: models.md에서 HTML 코드로 변환된 HTML파일 

<h1>Mercedes</h1>
<ul>
<li>S class</li>
<li>E class</li>
<li>C class</li>
<li>A class</li>
</ul>
<h1>BMW</h1>
<ul>
<li>7 serise</li>
<li>5 serise</li>
<li>3 serise</li>
<li>1 serise</li>
</ul>
<h1>Audi</h1>
<ul>
<li>A7</li>
<li>A5</li>
<li>A3</li>
<li>A1</li>
</ul>

 

Note: 옵션으로 바이너리 모드를 사용하는 두 가지 이유

1. 만약 markdown.markdownFromFile() 함수에 바이너리 모드가 아닌 문자열을 전달하면, 파일 시스템에서 읽을 수 있는 파일 경로('/home/file.md')로 해석되기 때문입니다. 

2. 문자를 플랫폼별 표현으로 변환하는 것과 관련된 문제를 사전에 방지할 수 있습니다.


 

마크다운(Markdown) 쉽게 따라하기

1. 마크다운 이란? 2004년 UI 디자이너인 존 그루버에 의해 만들어진 텍스트 기반의 언어인 Markup Language이다. 마크다운은 읽고 쓰기가 쉽고 HTML 기반이라 웹상에서 글쓰기 도구로 활용되고 있습니

freernd.tistory.com

댓글