# -*- 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")