Εξαγωγή κειμένου από αρχεία OneNote χρησιμοποιώντας το Python
Αν χρειάζεστε να διαβάσετε κείμενο από το Microsoft OneNote .one αρχεία σε ένα Python script, χωρίς να εγκαταστήσετε το Microsoft Office ή να τρέξετε Windows, Aspose.Note FOSS for Python είναι η λύση. Είναι μια 100% δωρεάν, ανοιχτού κώδικα βιβλιοθήκη που αναλύει άμεσα τη δυαδική μορφή του OneNote και εκθέτει ένα καθαρό Python API.
Εγκατάσταση
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. Προσθέστε αυτό στην αρχή του script σας:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Τι υποστηρίζει η βιβλιοθήκη
| Λειτουργία | Υποστηρίζεται |
|---|---|
Ανάγνωση .one αρχεία (διαδρομή ή ροή) | Ναι |
Εξαγωγή RichText.Text (απλό κείμενο) | Ναι |
Επιθεώρηση TextRun.Style (έντονο, πλάγιο, υπερσύνδεσμος, γραμματοσειρά) | Ναι |
| Εξαγωγή κειμένου από κελιά πίνακα | Ναι |
| Ανάγνωση τίτλων σελίδων | Ναι |
Εγγραφή πίσω σε .one | Όχι |
| Κρυπτογραφημένα έγγραφα | Όχι |