חילוץ טקסט מקבצי 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לא
מסמכים מוצפניםלא

הצעדים הבאים