关于docx里大文本的提取以及文件结构

提取大数据

背景:文件数据很大,直接复制会导致机器卡死等效率极低的情况

解密处理

首先看到 .docx 是加密的 Office 文档。用 msoffcrypto 解密:

from pathlib import Path
import msoffcrypto

src = Path(r"C:\Users\q1388\Downloads\download\羊皮卷.docx") #原绝对路径
out = Path("decrypted.docx") #生成文件

with src.open("rb") as f:
    office = msoffcrypto.OfficeFile(f)
    office.load_key(password="20240815")   #密码
    with out.open("wb") as g:
        office.decrypt(g)

读取

接下来有两种做法:

1、转成zip(这一步可能存在额外隐写)

因为docx本质是压缩包,改后缀名后可以成功打开压缩包,进行手动复制

2、python代码

from docx import Document
from pathlib import Path
import base64
import re

doc = Document("decrypted.docx")

for i, para in enumerate(doc.paragraphs):    #doc.paragraphs 是一个段落列表,每个 para 代表 Word 里的一段。enumerate(...) 会同时给出编号和内容
    text = "".join(run.text for run in para.runs).strip()  #第 i 段 -> 把这一段内部所有碎片文本拼回完整字符串 -> 去掉首尾空白

BASE64下的文件头:

UEsD -> ZIP
iVBOR -> PNG
/9j/ -> JPG
JVBER -> PDF
R0lG -> GIF

转成zip的文件结构

分布位置文件 / 目录作用
根目录[Content_Types].xml内容类型清单,声明包内每类文件是什么类型,比如正文、样式、图片、主题、批注等
根目录_rels/顶层关系目录
_rels/.rels顶层关系文件,告诉 Word 主文档在哪里,通常指向 word/document.xmldocProps/*
根目录docProps/文档属性目录,存元数据
docProps/core.xml核心元数据:标题、作者、主题、关键词、创建时间、修改时间、最后修改者
docProps/app.xml应用级元数据:创建软件、页数、字数、模板、公司、编辑时长等
docProps/custom.xml自定义属性,用户或软件可写入任意键值对
根目录word/Word 正文主体目录,绝大多数内容都在这里
word/document.xml正文主文件,存段落、文本、表格、图片引用、超链接引用等
word/_rels/正文关系目录
word/_rels/document.xml.rels正文关系文件,记录 document.xml 中引用的图片、超链接、页眉、页脚、脚注、嵌入对象等路径
word/styles.xml样式表,定义标题、正文、字体、颜色、段落格式等
word/settings.xml文档设置,比如兼容模式、隐藏文字显示、修订设置、文档保护等
word/fontTable.xml字体表,记录文档使用过的字体
word/numbering.xml编号和项目符号规则,比如有序列表、无序列表、多级编号
word/webSettings.xmlWeb/HTML 兼容设置,通常不重要
word/theme/主题目录
word/theme/theme1.xml主题配置,包括主题字体、主题颜色、效果等
word/media/媒体资源目录
word/media/image1.png / image1.jpeg文档中的图片资源
word/embeddings/嵌入对象目录
word/embeddings/oleObject1.binOLE 嵌入对象,比如嵌入的 Excel、Word、压缩包、二进制对象
word/embeddings/Microsoft_Excel_Worksheet1.xlsx直接嵌入的 Office 文件
word/charts/图表目录
word/charts/chart1.xml图表结构和数据引用
word/diagrams/SmartArt 图形目录
word/diagrams/data1.xml / layout1.xmlSmartArt 的数据、布局、样式
word/comments.xml批注内容
word/footnotes.xml脚注内容
word/endnotes.xml尾注内容
word/header1.xml / header2.xml页眉内容
word/footer1.xml / footer2.xml页脚内容
word/vbaProject.binVBA 宏工程,普通 .docx 正常不该有,带宏通常是 .docm
word/commentsExtended.xml扩展批注信息,比如现代 Word 的批注元数据
word/people.xml批注作者、协作人员等人物信息
word/glossary/构建基块目录,存自动图文集、封面、页眉页脚模板等
document.docx
├── [Content_Types].xml
├── _rels/
│   └── .rels
├── docProps/
│   ├── core.xml
│   ├── app.xml
│   └── custom.xml
└── word/
    ├── document.xml
    ├── styles.xml
    ├── settings.xml
    ├── fontTable.xml
    ├── numbering.xml
    ├── webSettings.xml
    ├── _rels/
    │   └── document.xml.rels
    ├── theme/
    │   └── theme1.xml
    ├── media/
    │   ├── image1.png
    │   └── image2.jpeg
    ├── embeddings/
    │   └── oleObject1.bin
    ├── charts/
    ├── comments.xml
    ├── footnotes.xml
    ├── endnotes.xml
    ├── header1.xml
    └── footer1.xml

标签语言:

XML 标签含义
<w:document>Word 文档根节点
<w:body>正文主体
<w:p>paragraph,段落
<w:r>run,同一格式的一段文字
<w:t>text,真正的文本内容
<w:tbl>表格
<w:tr>表格行
<w:tc>表格单元格
<w:drawing>图片、图形等绘制对象
<w:hyperlink>超链接
<w:ins>修订中的插入内容
<w:del> / <w:delText>修订中的删除内容
<w:rPr>run 的格式属性,比如字体、颜色、加粗、隐藏
<w:pPr>段落格式属性,比如对齐、缩进、行距

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇