Python를 사용하여 OneNote 파일에서 텍스트 추출
Microsoft OneNote에서 텍스트를 읽어야 할 경우 .one Python 스크립트에서 파일을 다루면서 Microsoft Office를 설치하거나 Windows를 실행하지 않고, Aspose.Note FOSS for Python 이것이 해결책입니다. OneNote 바이너리 포맷을 직접 파싱하고 깔끔한 Python API를 제공하는 100% 무료 오픈소스 라이브러리입니다.
설치
pip install aspose-note
API 키 없음. 라이선스 파일 없음. Microsoft Office 없음.
가장 간단한 방법: GetChildNodes(RichText)
OneNote 텍스트는 다음에 저장됩니다 RichText 페이지, 개요 및 개요 요소에 걸쳐 분산된 노드에. GetChildNodes(RichText) 전체 문서 트리를 재귀적으로 검색하고 모든 텍스트 노드를 평탄한 리스트로 반환합니다:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
이는 모든 텍스트 콘텐츠를 추출하는 가장 빠른 방법입니다 .one 파일에서.
텍스트를 파일에 저장
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
lines = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
with open("extracted.txt", "w", encoding="utf-8") as f:
f.write("\n".join(lines))
print(f"Saved {len(lines)} text blocks to extracted.txt")
페이지별 텍스트 추출
각 텍스트 블록이 어느 페이지에서 왔는지 알아야 할 때:
from aspose.note import Document, Page, RichText
doc = Document("MyNotes.one")
for page in doc.GetChildNodes(Page):
title = (
page.Title.TitleText.Text
if page.Title and page.Title.TitleText
else "(untitled)"
)
page_texts = [rt.Text for rt in page.GetChildNodes(RichText) if rt.Text]
print(f"\n=== {title} ===")
for text in page_texts:
print(text)
하이퍼링크 추출
하이퍼링크는 개별 TextRun 내부 객체에 저장됩니다 RichText 노드에 있습니다. 확인하세요 run.Style.IsHyperlink:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.Runs:
if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
print(f"{run.Text!r} -> {run.Style.HyperlinkAddress}")
서식 감지: 굵게, 기울임, 밑줄
각각의 TextRun 각 문자의 서식을 통해 전달됩니다 TextStyle:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.Runs:
s = run.Style
if any([s.Bold, s.Italic, s.Underline]):
flags = ", ".join(f for f, v in [
("bold", s.Bold), ("italic", s.Italic), ("underline", s.Underline)
] if v)
print(f"[{flags}] {run.Text.strip()!r}")
스트림에서 읽기
클라우드 스토리지, HTTP 응답 본문 또는 메모리 버퍼와 함께 작동합니다:
import io, urllib.request
from aspose.note import Document, RichText
##Example: load from bytes already in memory
one_bytes = open("MyNotes.one", "rb").read()
doc = Document(io.BytesIO(one_bytes))
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
print(f"Extracted {len(texts)} text block(s)")
Windows 인코딩 수정
Windows 터미널에서는, sys.stdout 레거시 인코딩을 사용하여 유니코드 문자에서 충돌이 발생할 수 있습니다. 스크립트 시작 부분에 다음을 추가하세요:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
라이브러리가 지원하는 내용
| 기능 | 지원됨 |
|---|---|
읽기 .one 파일 (경로 또는 스트림) | 예 |
추출 RichText.Text (일반 텍스트) | 예 |
검사 TextRun.Style (굵게, 기울임, 하이퍼링크, 글꼴) | 예 |
| 표 셀에서 텍스트 추출 | 예 |
| 페이지 제목 읽기 | 예 |
다시 쓰기 대상 .one | 아니오 |
| 암호화된 문서 | 아니오 |