两台电脑一台做服务器 网站,河南网站建设优化推广,扁平 wordpress,wordpress-黄聪引言
在文档处理中#xff0c;我们经常需要将Word文档中的内容转换成其他格式#xff0c;如Excel#xff0c;以便更好地进行数据分析和报告。针对这一需求#xff0c;我编写了一个Python脚本#xff0c;能够批量处理指定目录下的Word文档#xff0c;将其内容结构化并转换…
引言
在文档处理中我们经常需要将Word文档中的内容转换成其他格式如Excel以便更好地进行数据分析和报告。针对这一需求我编写了一个Python脚本能够批量处理指定目录下的Word文档将其内容结构化并转换为Excel文件。
功能概述
这个脚本的主要功能包括
批量读取Word文档自动检索指定目录下的所有Word文档.docx格式。内容抽取和组织根据Word文档中的标题层级Heading抽取和组织内容。关键信息提取自动从Word文档的文件名中提取关键信息作为Excel表格中的一级节点名称。结构化DataFrame创建将抽取的信息转化为DataFrame包含一级至四级节点及其对应内容。Excel文件保存将每个Word文档转换得到的DataFrame保存为同名的Excel文件位于原始Word文档所在的同一目录。
使用方法
准备文档确保所有待处理的Word文档位于同一目录下并且每个文档中要有定义好的标题样式一级标题、二级标题等。指定目录修改脚本中的batch_process_word_to_excel函数中的directory参数指定Word文档所在目录。运行脚本执行脚本等待处理完成。脚本将在指定目录下生成对应的Excel文件文件名与原Word文档一致但扩展名为’.xlsx’。
代码解析
以下是脚本的完整代码包含了所需的库和函数定义
# -*- coding: utf-8 -*-此Python脚本旨在自动化处理目录下所有的Word文档(.docx)将其内容结构化并转换为Excel文件(.xlsx)。主要功能
1. 批量读取指定目录下的所有Word文档。
2. 对每个Word文档根据文档内的标题层级(Heading)结构抽取和组织内容。
3. 自动从Word文档的文件名中提取关键信息作为Excel表格中的一级节点名称特别关注“分册”和“细则”之间的文本。
4. 将抽取的信息转化为结构化的DataFrame其中包含一级至四级节点及其对应内容。具体转换规则如下填充说明1.word文件名为一级标题作为Excel中的一级节点2.word中的一级标题作为Excel中的二级节点一级标题和当前一级标题下的第一个二级标题之间的正文内容作为Excel的二级内容3.word中的二级标题作为Excel中的三级节点二级标题和当前二级标题下的第一个三级标题之间的正文内容作为Excel的三级内容4.word中的三级标题作为Excel中的四级节点三级标题和当前三级标题下的第一个四级标题之间的正文内容作为Excel的四级内容
5. 将每个Word文档转换得到的DataFrame保存为同名的Excel文件位于原始Word文档所在的同一目录。使用方法
- 确保所有待处理的Word文档位于同一目录下。并且每个word中要有样式一级标题、二级标题、三级标题等
- 修改batch_process_word_to_excel函数中的directory参数指定Word文档所在目录。
- 运行脚本脚本将在指定目录下生成对应的Excel文件文件名与原Word文档一致但扩展名为.xlsx。依赖库
- os: 提供与操作系统交互的功能如文件和目录操作。
- docx: 用于读取Word文档的库。
- pandas: 用于数据处理和分析的库创建DataFrame和保存Excel文件。注意事项
- 代码假设Word文档中的标题层级不超过四级。
- 一级节点名称的提取逻辑基于文件名中包含“分册”和“细则”的特定格式。
- 如需处理不同层级或文件命名规则需相应调整代码逻辑。
import os
import docx
import pandas as pddef extract_title_from_filename(filename):# 分割文件名找到分册和细则parts filename.split(分册)if len(parts) 1:title_part parts[1].split(细则)[0]return title_part.strip() # 去除前后空格else:return filename # 如果没有找到分册或细则返回原文件名def process_word_to_excel(file_path):doc docx.Document(file_path)columns [一级节点, 二级节点, 二级内容, 三级节点, 三级内容, 四级节点, 四级内容]df pd.DataFrame(columnscolumns)# 获取Word文档的文件名并从中提取一级节点名称filename os.path.basename(file_path)word_file_name extract_title_from_filename(filename)current_level2 current_level3 current_level4 current_content last_level 0for paragraph in doc.paragraphs:if paragraph.style.name.startswith(Heading):heading_level int(paragraph.style.name[-1])if heading_level last_level:if current_level4:new_row pd.DataFrame({一级节点: [word_file_name],二级节点: [current_level2],三级节点: [current_level3],四级节点: [current_level4],四级内容: [current_content]})elif current_level3:new_row pd.DataFrame({一级节点: [word_file_name],二级节点: [current_level2],三级节点: [current_level3],三级内容: [current_content]})elif current_level2:new_row pd.DataFrame({一级节点: [word_file_name],二级节点: [current_level2],二级内容: [current_content]})df pd.concat([df, new_row], ignore_indexTrue)current_content if heading_level 1:current_level2 paragraph.textcurrent_level3 current_level4 last_level 1elif heading_level 2:current_level3 paragraph.textcurrent_level4 last_level 2elif heading_level 3:current_level4 paragraph.textlast_level 3else:current_content paragraph.text \nif current_content:if current_level4:new_row pd.DataFrame({一级节点: [word_file_name],二级节点: [current_level2],三级节点: [current_level3],四级节点: [current_level4],四级内容: [current_content]})elif current_level3:new_row pd.DataFrame({一级节点: [word_file_name],二级节点: [current_level2],三级节点: [current_level3],三级内容: [current_content]})elif current_level2:new_row pd.DataFrame({一级节点: [word_file_name],二级节点: [current_level2],二级内容: [current_content]})df pd.concat([df, new_row], ignore_indexTrue)return dfdef batch_process_word_to_excel(directory):for filename in os.listdir(directory):if filename.endswith(.docx):file_path os.path.join(directory, filename)df process_word_to_excel(file_path)excel_filename os.path.splitext(filename)[0] .xlsxexcel_path os.path.join(directory, excel_filename)df.to_excel(excel_path, indexFalse)print(fProcessed {filename} to {excel_filename})# 调用函数指定目录
batch_process_word_to_excel(D:\\test)