Ekstrak Teks dari Fail OneNote Menggunakan Python

Jika anda perlu membaca teks dari Microsoft OneNote .one fail dalam skrip Python, tanpa memasang Microsoft Office atau menjalankan Windows, Aspose.Note FOSS for Python adalah penyelesaiannya. Ia merupakan perpustakaan 100% percuma, sumber terbuka yang mengurai format binari OneNote secara langsung dan menyediakan API Python yang bersih.

Pasang

pip install aspose-note

Tiada kunci API. Tiada fail lesen. Tiada Microsoft Office.


Pendekatan Paling Mudah: GetChildNodes(RichText)

Teks OneNote disimpan dalam RichText node yang diedarkan merentasi halaman, rangka, dan elemen rangka. GetChildNodes(RichText) melakukan carian rekursif pada seluruh pokok dokumen dan mengembalikan setiap node teks sebagai senarai rata:

from aspose.note import Document, RichText

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

Ini adalah cara paling pantas untuk mendapatkan semua kandungan teks daripada sebuah .one fail.


Simpan Teks ke Fail

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

Ekstrak Teks per Halaman

Apabila anda perlu mengetahui halaman mana setiap blok teks berasal:

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)

Ekstrak Pautan Hiperteks

Pautan hiper disimpan pada individu TextRun objek dalam RichText node. Semak run.Style.IsHyperlink:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        if run.Style.IsHyperlink and run.Style.HyperlinkAddress:
            print(f"{run.Text!r}  ->  {run.Style.HyperlinkAddress}")

Kesan Pemformatan: Tebal, Condong, Garis Bawah

Setiap TextRun membawa pemformatan per-aksara melalui TextStyle:

from aspose.note import Document, RichText

doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
    for run in rt.TextRuns:
        s = run.Style
        if any([s.IsBold, s.IsItalic, s.IsUnderline]):
            flags = ", ".join(f for f, v in [
                ("bold", s.IsBold), ("italic", s.IsItalic), ("underline", s.IsUnderline)
            ] if v)
            print(f"[{flags}] {run.Text.strip()!r}")

Baca dari Aliran

Berfungsi dengan storan awan, badan respons HTTP, atau penampan dalam memori:

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

Pembetulan Pengekodan Windows

Pada terminal Windows, sys.stdout mungkin menggunakan pengekodan warisan yang menyebabkan kerosakan pada aksara Unicode. Tambahkan ini di permulaan skrip anda:

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

Apa yang Disokong oleh Pustaka

CiriDisokong
Baca .one fail (laluan atau aliran)Ya
Ekstrak RichText.Text (teks biasa)Ya
Periksa TextRun.Style (tebal, condong, pautan, fon)Ya
Ekstrak teks dari sel jadualYa
Baca tajuk halamanYa
Balas kepada .oneTidak
Dokumen terenkripsiTidak

Langkah Seterusnya