Extreu text dels fitxers OneNote usant Python
Si necessites llegir text des de Microsoft OneNote .one fitxers en un script Python, sense instal·lar Microsoft Office o executar Windows, Aspose.Note FOSS for Python és la solució. És una biblioteca 100% gratuïta i de codi obert que analitza directament el format binari de OneNote i exposa una API Python neta.
Instal·la
pip install aspose-note
Cap clau d’API. Cap fitxer de llicència. Cap Microsoft Office.
L’enfocament més senzill: GetChildNodes(RichText)
El text de OneNote s’emmagatzema a RichText nodes distribuïts per pàgines, esquemes i elements d’esquema. GetChildNodes(RichText) realitza una cerca recursiva de tot l’arbre del document i retorna cada node de text com una llista plana:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
Aquesta és la manera més ràpida d’obtenir tot el contingut de text d’un .one fitxer.
Desa el text a un fitxer
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")
Extreu text per pàgina
Quan necessites saber de quina pàgina prové cada bloc de text:
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)
Extreu enllaços
Els hiperenllaços s’emmagatzemen en elements individuals TextRun dins d’objectes RichText nodes. Comprova 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}")
Detecta format: Negreta, Cursiva, Subratllat
Cada TextRun porta format per caràcter a través del seu 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}")
Llegeix des d’un flux
Funciona amb emmagatzematge al núvol, cossos de resposta HTTP o buffers en memòria:
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)")
Correcció de codificació a Windows
Als terminals de Windows, sys.stdout pot utilitzar una codificació antiga que falla amb caràcters Unicode. Afegeix això al principi del teu script:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Què admet la biblioteca
| Funcionalitat | Compatible |
|---|---|
Llegir .one fitxers (ruta o flux) | Sí |
Extreu RichText.Text (text pla) | Sí |
Inspeccionar TextRun.Style (negreta, cursiva, enllaç, font) | Sí |
| Extreure text de les cel·les de la taula | Sí |
| Llegir títols de pàgina | Sí |
Escriure de nou a .one | No |
| Documents encriptats | No |