Python腳本:將Word文檔轉換為Excel文件

在這里插入圖片描述

引言

在文檔處理中,我們經常需要將Word文檔中的內容轉換成其他格式,如Excel,以便更好地進行數據分析和報告。針對這一需求,我編寫了一個Python腳本,能夠批量處理指定目錄下的Word文檔,將其內容結構化并轉換為Excel文件。

功能概述

這個腳本的主要功能包括:

  1. 批量讀取Word文檔:自動檢索指定目錄下的所有Word文檔(.docx格式)。
  2. 內容抽取和組織:根據Word文檔中的標題層級(Heading),抽取和組織內容。
  3. 關鍵信息提取:自動從Word文檔的文件名中提取關鍵信息,作為Excel表格中的一級節點名稱。
  4. 結構化DataFrame創建:將抽取的信息轉化為DataFrame,包含一級至四級節點及其對應內容。
  5. Excel文件保存:將每個Word文檔轉換得到的DataFrame保存為同名的Excel文件,位于原始Word文檔所在的同一目錄。

使用方法

  1. 準備文檔:確保所有待處理的Word文檔位于同一目錄下,并且每個文檔中要有定義好的標題樣式(一級標題、二級標題等)。
  2. 指定目錄:修改腳本中的batch_process_word_to_excel函數中的directory參數,指定Word文檔所在目錄。
  3. 運行腳本:執行腳本,等待處理完成。腳本將在指定目錄下生成對應的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(columns=columns)# 獲取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_index=True)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 + '\n'if 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_index=True)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] + '.xlsx'excel_path = os.path.join(directory, excel_filename)df.to_excel(excel_path, index=False)print(f'Processed {filename} to {excel_filename}')# 調用函數,指定目錄
batch_process_word_to_excel('D:\\test')

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39373.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39373.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39373.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PTrade如何獲取技術值班?如get_RSI - 相對強弱指標;PTrade量化軟件如何獲取?

get_RSI - 相對強弱指標 get_RSI(close, n6) 使用場景 該函數僅在回測、交易模塊可用 接口說明 獲取相對強弱指標RSI指標的計算結果 PTrade是恒生公司開發的一款專業量化軟件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 參數 close&#xff1a;價格…

.NET發布成單個文件后獲取不到程序所在路徑的問題

.net程序不發布成單個文件&#xff0c;所以運行都是正常的&#xff0c;但是發布成單個文件后發現使用&#xff1a; var basePath Path.GetDirectoryName((System.Reflection.Assembly.GetExecutingAssembly().Location)); 獲取不到應用程序所在的路徑了。 找一下幾個獲取本程…

從混亂到有序:企業級在線文檔助力中小企業數字化轉型的蛻變

在當今數字化浪潮下&#xff0c;企業的數字化轉型已成為行業發展的必然趨勢。他們數字化轉型的痛點在哪里&#xff1f;資金有限、技術人才短缺和管理的復雜性等。很多時候&#xff0c;它們的文件管理比較混亂&#xff0c;大量的知識和數據分散在不同的系統&#xff0c;形成了數…

一篇文章了解URI

1、Uri介紹 在現代網絡應用中&#xff0c;URI&#xff08;Uniform Resource Identifier&#xff0c;統一資源標識符&#xff09;是一個重要的概念。URI用于標識互聯網上的資源&#xff0c;無論是一個網頁、一張圖片、還是一個視頻文件&#xff0c;URI都可以唯一地指向這些資源。…

Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像

Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像 Docker 常見容器 第三方鏡像地址 Docker國內鏡像 docker國內鏡像 docker鏡像1、MySQL2、Redis3、Redis-Stack4、Redis-Stack-Server5、ElasticSearch6、Kibana7、ElasticSearch-Head8、Nginx9、Rabbi…

Web后端開發概述環境搭建項目創建servlet生命周期

Web開發概述 web開發指的就是網頁向后再讓發送請求,與后端程序進行交互 web后端(javaEE)程序需要運行在服務器中 這樣前端才可以對其進行進行訪問 什么是服務器? 解釋1: 服務器就是一款軟件,可以向其發送請求,服務器會做出一個響應.可以在服務器中部署文件&#xff0c;讓…

MySQL:MySQL總結

文章目錄 MySQL思維導圖基礎實際在 Innodb 存儲引擎中&#xff0c;會用一個特殊的記錄來標識最后一條記錄&#xff0c;該特殊的記錄的名字叫 supremum pseudo-record &#xff0c;所以掃描第二行的時候&#xff0c;也就掃描到了這個特殊記錄的時候&#xff0c;會對該主鍵索引加…

OpenCV 張正友標定法(二)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 在之前的博客OpenCV 張氏標定法中,我們沒有考慮鏡頭畸變等因素,因此計算出的內參與外參均是理想情況下的數值,而如果我們考慮到鏡頭的畸變: 我們就需要考慮使用最小二乘法最小化像素坐標的重投影誤差(上述所求…

套接字的原理和作用機制

套接字&#xff08;Socket&#xff09;是實現網絡通信的基礎&#xff0c;它提供了在網絡中進行數據傳輸的接口和機制。以下是關于套接字原理和作用機制的詳細解釋&#xff1a; 1. 套接字的基本概念 套接字&#xff1a;套接字是網絡通信的端點&#xff0c;可以理解為通信鏈路的…

重溫react-10(函數組件和類組件的ref獲取方式)

App.js的代碼 06是函數組件 07是類組件 import React, { useEffect, useRef } from react; import LearnFunction06 from ./LearnFunction06; // 函數組件和類組件的ref使用方式 import LearnFunction07 from ./LearnFunction07; // 函數組件和類組件的ref使用方式 export de…

dell服務器RAID5磁盤陣列出現故障的解決過程二——熱備盤制作與壞盤替換過程

目錄 背景方案概念全局熱備&#xff08;Global Hot Spare&#xff09;&#xff1a;獨立熱備&#xff08;Dedicated Hot Spare&#xff09;&#xff1a; 過程8號制作成熱備清除配置制作獨立熱備熱備頂替壞盤直接rebuild 更換2號盤2號熱備 注意注意事項foreign狀態要先清除配置 背…

【Mac】Boxy SVG for Mac(矢量圖編輯器)及同類型軟件介紹

軟件介紹 Boxy SVG 是一款功能強大的矢量圖形編輯器&#xff0c;專門為 macOS 平臺設計開發。它主要用于創建和編輯 SVG&#xff08;可縮放矢量圖形&#xff09;文件&#xff0c;是設計師和開發者們制作矢量圖形的理想工具。 以下是關于 Boxy SVG 的主要特點和功能&#xff1a…

Rural Access Index (RAI)農村通達指數

農村通達指數&#xff08;RAI&#xff09; 簡介 農村通達指數&#xff08;RAI&#xff09;是全球交通領域最重要的發展指標之一。它是目前可持續發展目標中唯一一個直接衡量農村通達性的指標&#xff0c;通過評估農村人口的四季道路通達性來實現。在 2015 年作為可持續發展目…

路由LLM:優化模型調用的成本與效率

引言 在最近的一些視頻和討論中&#xff0c;我們經常提到使用較便宜和較快的模型來替代一些昂貴的大型語言模型&#xff08;LLM&#xff09;。這種方法的一個主要原因是看到許多人在不必要的場合調用如GPT-4或Claude Opus等高級模型&#xff0c;從而浪費了大量資金。而事實上&…

IDEA 編譯單個Java文件

文章目錄 一、class文件的生成位置二、編譯單個文件編譯項目報錯Error:java: 無效的源發行版: 8 一、class文件的生成位置 file->project structure->Modules 二、編譯單個文件 選中文件&#xff0c;點擊recompile 編譯項目報錯 Error:java: 無效的源發行版: 8 Fi…

golang實現網卡流量監控

獲取當前時刻一分鐘前的網卡流量排序 package mainimport ("fmt""github.com/mackerelio/go-osstat/network""log""net/http""sort""strconv""time" )var arr []map[string]int var arr2 []map[string]…

2024最新PyCharm安裝教程(附激活碼)

今天講解的是PyCharm安裝教程 一、軟件簡介 PyCharm是一款Python IDE&#xff0c;其帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具&#xff0c;比如&#xff0c; 調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制等等。此外…

字符串和正則表達式踩坑

// 中石化加油卡號格式&#xff1a;以 100011 開頭共19位public static final String ZHONGSHIYOU_OIL_CARD_PATTERN "^100011\\d{13}$";// 中石油加油卡號格式&#xff1a;以90、95、70開頭共16位public static final String ZHONGYOU_OIL_CARD_PATTERN "^(9…

使用 urllib OpenSSL 時遇到的問題及解決

題意&#xff1a; ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ssl module is compiled with LibreSSL 2.8.3 當前使用的 urllib3 版本&#xff08;v2.0&#xff09;僅支持 OpenSSL 1.1.1 或更高版本&#xff0c;但你的 Python 環境中的 ssl 模塊…

安裝opencv-python出錯,怎么辦?

安裝opencv-python出錯 解決方法&#xff1a; 具體版本號&#xff0c;python3.6對應的就是4.3.0.38 pip install opencv-python4.3.0.38 -i https://pypi.tuna.tsinghua.edu.cn/simple