이 전 포스팅에서는 마크다운 텍스트 파일을 HTML로 변환하는 코드를 작성하는 실습을 했습니다. 이번 포스팅은 파이썬 디렉토리(directory)에서 마크 다운 텍스트를 생성 후 마크다운 파일(.md) 생성 후 HTML로 변환하는 프로그램을 만들어 보겠습니다.'
디렉토리에서 마크 다운 생성 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
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. 문자를 플랫폼별 표현으로 변환하는 것과 관련된 문제를 사전에 방지할 수 있습니다.
'Integration & Python' 카테고리의 다른 글
Python 파일 삭제 및 폴더 내 파일 전체 삭제 방법 (1) | 2021.11.08 |
---|---|
파이썬-마크다운 커맨드라인 인터페이스 사용 (0) | 2021.06.23 |
파이썬-마크다운 텍스트 파일 HTML 변환 코드 작성 (1) | 2021.06.21 |
파이썬-마크다운 설치, 패키지 사용법 (0) | 2021.06.18 |
마크다운(Markdown) 쉽게 따라하기 (0) | 2021.06.10 |
댓글