Extraire du texte à partir de fichiers OneNote en utilisant Python
Si vous devez lire du texte depuis Microsoft OneNote .one des fichiers dans un script Python, sans installer Microsoft Office ni exécuter Windows, Aspose.Note FOSS for Python est la solution. C’est une bibliothèque 100 % gratuite et open source qui analyse directement le format binaire OneNote et expose une API Python propre.
Installer
pip install aspose-note
Pas de clé API. Pas de fichier de licence. Pas de Microsoft Office.
L’approche la plus simple : GetChildNodes(RichText)
Le texte OneNote est stocké dans RichText des nœuds répartis sur les pages, les plans et les éléments de plan. GetChildNodes(RichText) effectue une recherche récursive de l’ensemble de l’arbre du document et renvoie chaque nœud de texte sous forme de liste plate :
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)
C’est la façon la plus rapide d’extraire tout le contenu texte d’un .one fichier.
Enregistrer le texte dans un fichier
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")
Extraire le texte par page
Lorsque vous devez savoir de quelle page provient chaque bloc de texte :
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)
Extraire les hyperliens
Les hyperliens sont stockés sur des TextRun objets au sein de RichText nœuds. Vérifiez 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}")
Détecter le formatage : gras, italique, souligné
Chaque TextRun transmet le formatage caractère par caractère à travers son 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}")
Lire depuis un flux
Fonctionne avec le stockage cloud, les corps de réponse HTTP ou les tampons en mémoire :
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)")
Correction d’encodage Windows
Sur les terminaux Windows, sys.stdout peut utiliser un encodage hérité qui plante avec les caractères Unicode. Ajoutez ceci au début de votre script :
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
Ce que la bibliothèque prend en charge
| Fonctionnalité | Pris en charge |
|---|---|
Lire .one fichiers (chemin ou flux) | Oui |
Extraire RichText.Text (texte brut) | Oui |
Inspecter TextRun.Style (gras, italique, hyperlien, police) | Oui |
| Extraire le texte des cellules de tableau | Oui |
| Lire les titres de page | Oui |
Écrire de nouveau dans .one | Non |
| Documents chiffrés | Non |