חילוץ טקסט מקבצי OneNote באמצעות Python
אם אתה צריך לקרוא טקסט מ-Microsoft OneNote .one קבצים ב-Python script, מבלי להתקין Microsoft Office או להריץ Windows, Aspose.Note FOSS for Python הוא הפתרון. זו ספרייה חינמית ב‑100%, קוד פתוח שמפענחת ישירות את פורמט הבינארי של OneNote ומחשיפה API נקי של Python.
התקנה
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 עשוי להשתמש בקידוד ישן שגורם לקריסה עם תווי Unicode. הוסף זאת בתחילת הסקריפט שלך:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
מה הספרייה תומכת
| תכונה | נתמך |
|---|---|
קריאה .one קבצים (נתיב או זרם) | כן |
חילוץ RichText.Text (טקסט רגיל) | כן |
בדוק TextRun.Style (מודגש, נטוי, קישור, גופן) | כן |
| חילץ טקסט מתאי טבלה | כן |
| קרא כותרות דפים | כן |
כתוב חזרה ל .one | לא |
| מסמכים מוצפנים | לא |