OneNote Dosyalarından Metin Çıkarın Python Kullanarak

Microsoft OneNote’tan metin okumanız gerekiyorsa .one dosyaları bir Python betiğinde, Microsoft Office kurmadan veya Windows çalıştırmadan, Aspose.Note FOSS for Python çözümdür. OneNote ikili formatını doğrudan ayrıştıran ve temiz bir Python API’si sunan %100 ücretsiz, açık kaynaklı bir kütüphanedir.

Kurulum

pip install aspose-note

API anahtarı yok. Lisans dosyası yok. Microsoft Office yok.


En Basit Yaklaşım: GetChildNodes(RichText)

OneNote metni şu şekilde depolanır: RichText sayfalar, taslaklar ve taslak öğeleri arasında dağıtılmış düğümlerde. GetChildNodes(RichText) tüm belge ağacında özyinelemeli bir arama yapar ve her metin düğümünü düz bir liste olarak döndürür:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    if rt.Text:
        print(rt.Text)

Bu, bir .one dosyadan tüm metin içeriğini almanın en hızlı yoludur.


Metni Bir Dosyaya Kaydet

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")

Sayfa Başına Metin Çıkar

Her metin bloğunun hangi sayfadan geldiğini bilmeniz gerektiğinde:

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)

Hiperlinkleri Çıkar

Köprüler bireysel TextRun nesneler içinde depolanır. RichText Kontrol edin 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}")

Biçimlendirmeyi Algıla: Kalın, İtalik, Altı Çizili

Her TextRun karakter başına biçimlendirmeyi kendi üzerinden taşır 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}")

Akıştan Oku

Bulut depolama, HTTP yanıt gövdeleri veya bellek içi tamponlarla çalışır:

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 Kodlama Düzeltmesi

Windows terminallerinde, sys.stdout Unicode karakterlerinde çökebilen eski bir kodlama kullanabilir. Betiğinizin başına şunu ekleyin:

import sys
if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

Kütüphanenin Desteklediği

ÖzellikDestekleniyor
Oku .one dosyalar (yol veya akış)Evet
Çıkar RichText.Text (düz metin)Evet
İncele TextRun.Style (kalın, italik, hiperbağlantı, yazı tipi)Evet
Tablo hücrelerinden metni çıkarEvet
Sayfa başlıklarını okuEvet
Geri yaz .oneHayır
Şifreli belgelerHayır

Sonraki Adımlar