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
| Ciri | Disokong |
|---|---|
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 jadual | Ya |
| Baca tajuk halaman | Ya |
Balas kepada .one | Tidak |
| Dokumen terenkripsi | Tidak |