Kuinka poimia teksti OneNote‑tiedostoista Pythonilla
Microsoft OneNote .one -tiedostot ovat binääritiedostoja, joita ei voida lukea tavallisena tekstinä tai jäsentää yleisillä XML-työkaluilla. Aspose.Note FOSS for Python tarjoaa puhtaan Python-parsijan, joka lataa .one -tiedostot täyteen dokumenttiobjektimalliin (DOM), mikä tekee tekstin, muotoilutietojen ja hyperlinkkien ohjelmallisesta poimimisesta suoraviivaista.
Aspose.Note FOSS:n käytön edut Pythonissa
- Ei Microsoft Officea vaadita: lue
.one-tiedostoja millä tahansa alustalla, mukaan lukien Linux CI/CD -palvelimet - Täysi tekstin ja muotoilun pääsy: pelkkä teksti, lihavointi/kursivointi/alleviivausosat, fonttien ominaisuudet ja hyperlinkkien URL-osoitteet
- Ilmainen ja avoimen lähdekoodin: MIT-lisenssi, ei käyttömaksuja tai API-avaimia
Vaiheittainen opas
Vaihe 1: Asenna Aspose.Note FOSS for Python
Asenna kirjasto PyPI:stä. Ydinpaketilla ei ole pakollisia riippuvuuksia:
pip install aspose-noteVahvista asennus:
from aspose.note import Document
print("Installation OK")Vaihe 2: Lataa .one‑tiedosto
Luo Document-instanssi antamalla tiedostopolku:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Section: {doc.DisplayName}")
print(f"Pages: {len(list(doc))}")Ladataan binaarisesta virrasta (esim. pilvitallennuksesta tai HTTP‑vastauksesta):
from aspose.note import Document
with open("MyNotes.one", "rb") as f:
doc = Document(f)Vaihe 3: Poimi kaikki tavallinen teksti
Käytä GetChildNodes(RichText) keräämään kaikki RichText-solmut asiakirjapuussa. Tämä suorittaa rekursiivisen syvyyssuuntaisen haun kaikilla sivuilla, sisällysluetteloilla ja sisällysluettelon elementeillä:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
for text in texts:
print(text)Tallentaaksesi kaikki teksti tiedostoon:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
texts = [rt.Text for rt in doc.GetChildNodes(RichText) if rt.Text]
with open("extracted_text.txt", "w", encoding="utf-8") as out:
out.write("\n".join(texts))
print(f"Wrote {len(texts)} text blocks to extracted_text.txt")Vaihe 4: Tarkastele muotoiltuja osuuksia
Jokainen RichText solmu sisältää TextRuns luettelon TextRun segmenteistä. Jokainen suoritus sisältää itsenäisen TextStyle merkkikohtaisella muotoilulla:
from aspose.note import Document, RichText
doc = Document("MyNotes.one")
for rt in doc.GetChildNodes(RichText):
for run in rt.TextRuns:
style = run.Style
attrs = []
if style.IsBold: attrs.append("bold")
if style.IsItalic: attrs.append("italic")
if style.IsUnderline: attrs.append("underline")
if style.IsStrikethrough: attrs.append("strikethrough")
if style.FontName: attrs.append(f"font={style.FontName}")
if style.FontSize: attrs.append(f"size={style.FontSize}pt")
label = ", ".join(attrs) if attrs else "plain"
print(f"[{label}] {run.Text!r}")Vaihe 5: Hae hyperlinkit
Hyperlinkit tallennetaan yksittäisille TextRun solmuille. Tarkista Style.IsHyperlink ja lue Style.HyperlinkAddress:
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"Link text: {run.Text!r}")
print(f"URL: {run.Style.HyperlinkAddress}")Vaihe 6: Poimi teksti sivukohtaisesti
Tekstin poimimiseksi järjestettynä sivun otsikon mukaan:
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)"
)
print(f"\n=== {title} ===")
for rt in page.GetChildNodes(RichText):
if rt.Text:
print(rt.Text)Yleisiä ongelmia ja korjauksia
1. ImportError: Moduulia nimeltä ‘aspose’ ei löydy
Syy: Pakettia ei ole asennettu aktiiviseen Python-ympäristöön.
Korjaus:
pip install aspose-note
##Confirm active environment:
pip show aspose-note2. FileNotFoundError .one‑tiedostoa ladattaessa
Syy: Tiedostopolku on virheellinen tai tiedostoa ei ole olemassa.
Korjaus: Käytä absoluuttista polkua tai tarkista, että tiedosto on olemassa ennen lataamista:
from pathlib import Path
from aspose.note import Document
path = Path("MyNotes.one")
if not path.exists():
raise FileNotFoundError(f"File not found: {path.resolve()}")
doc = Document(str(path))3. UnicodeEncodeError Windowsissa tulostettaessa
Syy: Windows-terminaalit saattavat käyttää vanhaa koodausta, joka ei pysty renderöimään Unicode-merkkejä.
Korjaus: Määritä stdout uudelleen skriptin alussa:
import sys
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")4. Tyhjän tekstin tulokset
Syy: Tiedosto .one voi olla tyhjä, sisältää vain kuvia tai taulukoita (ei RichText-solmuja) tai olla muistiinpanotiedosto (.onetoc2) eikä osiotiedosto (.one).
Fix: Tarkista sivumäärä ja tarkastele solmutyyppejä:
from aspose.note import Document
doc = Document("MyNotes.one")
print(f"Pages: {len(list(doc))}")
for page in doc:
print(f" Children: {sum(1 for _ in page)}")5. IncorrectPasswordException
Syy: Tiedosto .one on salattu. Salattuja asiakirjoja ei tueta.
Fix: Aspose.Note FOSS for Python ei tue salattuja .one-tiedostoja. Täydellinen kaupallinen Aspose.Note -tuote tukee salauksen purkua.
Usein kysytyt kysymykset
Voinko poimia tekstin kaikilta sivuilta kerralla?
Kyllä. doc.GetChildNodes(RichText) hakee koko asiakirjapuun rekursiivisesti, mukaan lukien kaikki sivut, sisällysluettelot ja sisällysluettelon elementit.
Tukiko kirjasto .onetoc2-muistion tiedostoja?
Ei. Kirjasto käsittelee vain .one-osatiedostoja. Muistion sisällysluettelotiedostot (.onetoc2) ovat eri formaattia, eikä niitä tueta.
Voinko poimia tekstiä taulukoista?
Kyllä. TableCell solmut sisältävät RichText lapsia, jotka voidaan lukea samalla tavalla:
from aspose.note import Document, Table, TableRow, TableCell, RichText
doc = Document("MyNotes.one")
for table in doc.GetChildNodes(Table):
for row in table.GetChildNodes(TableRow):
for cell in row.GetChildNodes(TableCell):
cell_text = " ".join(rt.Text for rt in cell.GetChildNodes(RichText)).strip()
print(cell_text, end="\t")
print()Mitä Python‑versioita tuetaan?
Python 3.10, 3.11 ja 3.12.
Onko kirjasto säikeiturvallinen?
Jokainen Document-instanssi tulisi käyttää yhdestä säikeestä. Rinnakkaista purkua varten luo erillinen Document jokaiselle säikeelle.
Liittyvät resurssit: