| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # -*- coding: utf-8 -*-
- import os
- import sys
- sys.stdout.reconfigure(encoding="utf-8", errors="replace")
- src = r"d:\Projects\Ai-DOP\SourceCode\ZZYDOP\doc\_tmp_xunbi.docx"
- out = r"d:\Projects\Ai-DOP\SourceCode\ZZYDOP\doc\_tmp_xunbi_extract.txt"
- from docx import Document
- from docx.table import Table
- from docx.text.paragraph import Paragraph
- doc = Document(src)
- def iter_block_items(parent):
- from docx.document import Document as _Doc
- from docx.oxml.ns import qn
- if isinstance(parent, _Doc):
- parent_elm = parent.element.body
- else:
- parent_elm = parent._tc
- for child in parent_elm.iterchildren():
- if child.tag == qn("w:p"):
- yield Paragraph(child, parent)
- elif child.tag == qn("w:tbl"):
- yield Table(child, parent)
- lines = []
- idx = 0
- for block in iter_block_items(doc):
- if isinstance(block, Paragraph):
- t = block.text.strip()
- if not t:
- continue
- idx += 1
- style = block.style.name if block.style is not None else ""
- lines.append(f"[P{idx}|{style}] {t}")
- else:
- idx += 1
- lines.append(f"[TABLE{idx}] rows={len(block.rows)} cols={len(block.columns)}")
- for ri, row in enumerate(block.rows):
- cells = [c.text.strip().replace("\n", " / ") for c in row.cells]
- lines.append(" | " + " | ".join(cells))
- with open(out, "w", encoding="utf-8") as f:
- f.write("\n".join(lines))
- print("wrote", out, os.path.getsize(out), "bytes,", len(lines), "lines")
|