옵시디언 md to html Python으로 변환하기

요즘 메모앱으로 핫한 옵시디언 md 파일에서 html 로 추출하는 코드에 대해서 알아보도록 하겠습니다.

옵시디언은 마크다운(Markdown) 형식을 지원하여 텍스트 기반으로 노트를 쉽게 작성할 수 있는 메모앱입니다.

다양한 플러그인 및 커스터마이제이션이 가능하여, 초보자 뿐만 아니라 고급 사용자에게도 인기가 많은 메모 애플리케이션입니다.

옵시디언 md 파일의 구성

옵시디언은 기본적으로 Valut라는 곳에 보관이 되며 각 Vault 마다 설정 파일을 갖게 됩니다. 즉, 여러 폴더를 여러개의 Vault로 구성할 수 있습니다.

옵시디언 vault의 구성

그리고 저장되는 파일은 다음과 같이 해당 Valut 폴더의 로컬 드라이브에 저장됩니다.

확장자는 md 파일이며, 해당 파일을 메모장 등으로 열면 단순히 텍스트 파일 형태로 관리가 됩니다.

markdown file 의 로컬 구성

따라서 markdown 포맷을 파일을 text 형태로 연 뒤에, html 로 변환해 주는 라이브러리로 바꾸어 주면 원하는 html 형태로 결과를 받을 수 있습니다.

파이썬으로 md 파일 읽기

우선 VS Code 등의 에디터를 열고, 다음의 라이브러리를 import 해줍니다.

import re

import markdown

import os

정규식 라이브러리- re

re 모듈은 Python에서 정규 표현식을 사용할 수 있게 해줍니다. 문자열에서 특정 패턴을 찾거나, 문자열을 조작할 때 사용됩니다.

re 라이브러리 : https://docs.python.org/ko/3/library/re.html

markdown 라이브러리 – markdown

markdown 모듈은 마크다운 형식의 텍스트를 HTML로 변환해주는 라이브러리입니다.

markdown 라이브러리 : https://pypi.org/project/Markdown/

os 라이브러리

os 모듈은 운영 체제와 상호작용하기 위한 다양한 함수를 제공합니다. 파일 시스템을 탐색하고, 파일을 관리하고, 운영 체제의 환경 변수에 접근할 때 사용됩니다.

md 파일 경로 읽어오기

아래와 같이 md 파일을 지정하고 한글인 경우 encoding을 utf-8을 지정한 후 md_content 변수에 값을 받아옵니다.

FILE_PATH = "d:\\myValut\\Python 옵시디언 md to html 코드.md"

with open(FILE_PATH, 'r', encoding='utf-8') as f:

    md_content = f.read()

그럼 markdown 형태로 저장되어 있는 텍스트 md 파일의 내용을 받아올 수 있습니다.

markdown 라이브러리로 html 코드로 변환

이렇게 받아온 markdown 내용은 markdown 라이브러리를 통해 다음과 같이 html 코드로 변환할 수 있습니다.

# Markdown을 HTML로 변환

html_content = markdown.markdown(md_content)

그러면 다음과 같이 html 형태의 코드로 변환해 줍니다.

옵시디언 md 파일을 html 태그로 파이썬 변환

옵시디언 이미지 파일 추출 및 실제 경로 만들기

옵시디언은 다음과 같은 형태로 이미지 참조 경로를 사용합니다.

![[Pasted image 20240331115900.png]]

따라서, 위의 이미지의 경로 및 파일명을 추출하고자 한다면 다음과 같이 정규식으로 처리할 수 있습니다.

image_paths = re.findall(r'!\[.*?\]', md_content)

그러면 해당 md 문서의 모든 이미지 파일명을 구해 올 수 있으며 해당 내역은 다음과 같이 확인할 수 있습니다.

%%이미지 resource 폴더를 지정하지 않은 경우 %%

IMAGE_FILE_PATH = "d:\\myValut\\"

image_filenames = [os.path.basename(path) for path in image_paths]

for filename in image_filenames:

    # print(filename)

    org_filename = filename.replace('![[', '').replace(']', '')

    print(IMAGE_FILE_PATH + org_filename)

정규식을 통해 추출된 이미지 파일을 실제 경로로 만들어 주기 위해서 구분 기호를 다음과 같이 replace해주고 실제 경로로 만들어 줍니다.

org_filename = filename.replace('![[', '').replace(']', '')

그러면 다음과 같이 실제 경로의 파일을 가져올 수 있습니다.

d:\myValut\Pasted image 20240331114447.png

d:\myValut\Pasted image 20240331114523.png

d:\myValut\Pasted image 20240331115900.png

d:\myValut\Pasted image 20240331115900.png

이상으로 md 파일을 html 로 추출하는 코드와 실제 image 경로를 만드는 방법을 알아보았습니다.

md 파일을 html 로 변환하는 자동화 코드 만들 때 잘 활용해 보시기 바랍니다.

그 밖에 도움이 되는 글

타입스크립트 express 빌드 배포(운영환경 도커)

AWS EKS 과금 방지 클린하게 관련 자원 삭제하기