Python提取word文字&图片

俗话说好记性不如乱笔头,年龄上来了,记性下去了,最近在项目复盘的时候,很多是word文件,想转移到Trilium上面,直接用复制黏贴Trilium会出现空白现象,也懒得再去升级或研究Trilium。

于是就想能不能用Python先去提取文字、图片,然后在Trilium中排版整理,这样也可以回忆&巩固一下项目。

废话文学到此结束,直接来吧~

pip install docx

从Word文档中提取所有文本

# 从Word文档中提取所有文本
def extract_text_from_doc(docx_path):
    output_dir = os.path.splitext(docx_path)[0]
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    # 加载文档
    doc = Document(docx_path)
    # 提取每个段落的文本,并使用换行符连接
    full_text = '\n'.join([para.text for para in doc.paragraphs])
    # 将提取的文本保存到指定的文件
    with open(f'{output_dir}/{timetools.get_current_timestamp()}.text', 'w', encoding='utf-8') as file:
        file.write(full_text)

从Word文档中提取所有图片

# 从Word文档中提取所有图片
def extract_images_from_docx(docx_path):
    output_dir = os.path.splitext(docx_path)[0]
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    doc = Document(docx_path)
    images=[]
    # 遍历文档的 part 对象中的所有关系(rels)。这些关系代表了文档中嵌入的元素
    for rel in doc.part.rels.values():
        # 检查关系的 reltype 是否包含字符串 "image",这表示这是一个图片关系。
        if "image" in rel.reltype:
            # 如果这是一个图片关系,将图片数据(blob)添加到 images 列表中。
            images.append(rel.target_part.blob)
    for index, image in enumerate(images):
        with open(f"{output_dir}/image_{index}.png", "wb") as f:
            f.write(image)

补充说明

1、在上述代码,有可能会出现如下:

ValueError: file 'xxx.docx' is not a Word file, content type is 'application/vnd.ms-word.document.macroEnabled.main+xml'

原因有很多,基本上大概意思就是这不是标准 Word 文档类型~

为图方便,最简单的方式就是打开这个报错的文件,另存为Microsoft word文档即可。

2、get_current_timestamp函数就是个获取当前时间的时间戳用于区别txt文件。

THE END
分享
二维码
打赏
海报
Python提取word文字&图片
俗话说好记性不如乱笔头,年龄上来了,记性下去了,最近在项目复盘的时候,很多是word文件,想转移到Trilium上面,直接用复制黏贴Trilium会出现空白现象,也懒……
<<上一篇
下一篇>>