요즘 메모앱으로 핫한 옵시디언 md 파일에서 html 로 추출하는 코드에 대해서 알아보도록 하겠습니다.
옵시디언은 마크다운(Markdown) 형식을 지원하여 텍스트 기반으로 노트를 쉽게 작성할 수 있는 메모앱입니다.
다양한 플러그인 및 커스터마이제이션이 가능하여, 초보자 뿐만 아니라 고급 사용자에게도 인기가 많은 메모 애플리케이션입니다.
옵시디언 md 파일의 구성
옵시디언은 기본적으로 Valut라는 곳에 보관이 되며 각 Vault 마다 설정 파일을 갖게 됩니다. 즉, 여러 폴더를 여러개의 Vault로 구성할 수 있습니다.
그리고 저장되는 파일은 다음과 같이 해당 Valut 폴더의 로컬 드라이브에 저장됩니다.
확장자는 md 파일이며, 해당 파일을 메모장 등으로 열면 단순히 텍스트 파일 형태로 관리가 됩니다.
따라서 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 형태의 코드로 변환해 줍니다.
옵시디언 이미지 파일 추출 및 실제 경로 만들기
옵시디언은 다음과 같은 형태로 이미지 참조 경로를 사용합니다.
![[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 로 변환하는 자동화 코드 만들 때 잘 활용해 보시기 바랍니다.