Extreure text de fitxers d’ OneNote amb Python
Si necessites llegir text de Microsoft OneNote .one arxius en un script Python, sense instal·lar Microsoft Office o executar Windows., Aspose.Note FOSS for Python és la solució. És una biblioteca 100% lliure i de codi obert que analisa el format binari d’OneNote directament i exposa una API Python neta.
Instal·lar
pip install aspose-note
No hi ha clau d’API, cap fitxer de llicència ni Microsoft Office.
L’enfocament més senzill: GetChildNodes(RichText)
El text de OneNote s’emmagatzema en: RichText nodes distribuïts a través de pàgines, contorns i elements del contorn. GetChildNodes(RichText) realitza una cerca recursiva de tot l’arbre del document i torna cada nodo de text com a 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 de treure tot el contingut del text d’un .one Arxiu.
Salvar text en 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")
Extracció de text per pàgina
Quan necessites saber de quina pàgina va venir 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)
Extracció d’hipervincles
Els hipervincles s’emmagatzemen en els enllaços individuals. TextRun objectes dins de RichText Nodes. 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}")
Detectar formatatge: en negreta, cursiva i sota línia.
Cada un. TextRun porta formatatge per caràcters a través de la seva 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}")
Llegir des d’un corrent
Funciona amb emmagatzematge en el núvol, cossos de resposta HTTP o buffers a la 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ó d’ codificació de Windows
En terminals de Windows, sys.stdout pot utilitzar una codificació legada que s’esvaeix en els caràcters d’Unicode. Afegir això al començament del seu script:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
El que dóna suport la biblioteca
| Característica | Ajudat |
|---|---|
Llegeix. .one arxius (camí o flux) | Sí, sí. |
Extracte RichText.Text (text simple) | Sí, sí. |
Inspecció TextRun.Style (en negreta, en cursiva, hipervincle, font) | Sí, sí. |
| Extracció de text des de les cel·les de la taula | Sí, sí. |
| Llegir títols de pàgines | Sí, sí. |
Escriu-me de nou. .one | No, no ho sé. |
| Documents xifrats | No, no ho sé. |