_tmp_read_xunbi.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import sys
  4. sys.stdout.reconfigure(encoding="utf-8", errors="replace")
  5. src = r"d:\Projects\Ai-DOP\SourceCode\ZZYDOP\doc\_tmp_xunbi.docx"
  6. out = r"d:\Projects\Ai-DOP\SourceCode\ZZYDOP\doc\_tmp_xunbi_extract.txt"
  7. from docx import Document
  8. from docx.table import Table
  9. from docx.text.paragraph import Paragraph
  10. doc = Document(src)
  11. def iter_block_items(parent):
  12. from docx.document import Document as _Doc
  13. from docx.oxml.ns import qn
  14. if isinstance(parent, _Doc):
  15. parent_elm = parent.element.body
  16. else:
  17. parent_elm = parent._tc
  18. for child in parent_elm.iterchildren():
  19. if child.tag == qn("w:p"):
  20. yield Paragraph(child, parent)
  21. elif child.tag == qn("w:tbl"):
  22. yield Table(child, parent)
  23. lines = []
  24. idx = 0
  25. for block in iter_block_items(doc):
  26. if isinstance(block, Paragraph):
  27. t = block.text.strip()
  28. if not t:
  29. continue
  30. idx += 1
  31. style = block.style.name if block.style is not None else ""
  32. lines.append(f"[P{idx}|{style}] {t}")
  33. else:
  34. idx += 1
  35. lines.append(f"[TABLE{idx}] rows={len(block.rows)} cols={len(block.columns)}")
  36. for ri, row in enumerate(block.rows):
  37. cells = [c.text.strip().replace("\n", " / ") for c in row.cells]
  38. lines.append(" | " + " | ".join(cells))
  39. with open(out, "w", encoding="utf-8") as f:
  40. f.write("\n".join(lines))
  41. print("wrote", out, os.path.getsize(out), "bytes,", len(lines), "lines")