最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)在多個(gè)Word文檔中一鍵搜索

 更新時(shí)間:2025年07月11日 10:45:26   作者:威碼視界  
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要在大量word文檔中查找特定的文本,下面小編就來和大家介紹一下如何使用Python腳本在同一文件夾下的所有word文件中搜索指定的文本吧

引言

在日常工作和學(xué)習(xí)中,我們經(jīng)常需要在大量word文檔中查找特定的文本。雖然手動(dòng)搜索是一種方法,但這種方法不僅效率低下,而且容易出錯(cuò)。幸運(yùn)的是,Python提供了強(qiáng)大的庫和工具,可以幫助我們自動(dòng)化這一過程。本文將介紹如何使用Python腳本在同一文件夾下的所有word文件中搜索指定的文本。

環(huán)境準(zhǔn)備

在開始之前,你需要確保你的Python環(huán)境已經(jīng)安裝了以下庫:

  • os:用于操作系統(tǒng)功能。
  • tkinter:用于圖形用戶界面。
  • docx:用于處理Word文檔。

你可以通過以下命令安裝所需的庫:

pip install python-docx

腳本詳解

以下是完整的代碼,我們將逐步解析其功能。

import os  # 導(dǎo)入os模塊,用于文件路徑操作
from tkinter import Tk, filedialog  # 導(dǎo)入Tk和filedialog模塊,用于圖形界面操作
from docx import Document  # 導(dǎo)入Document模塊,用于讀取Word文檔

def search_in_docx(file_path, search_text):
    """
    在指定的Word文檔中搜索指定的文本。
    :param file_path: Word文檔的路徑
    :param search_text: 要搜索的文本
    :return: 如果找到文本則返回True,否則返回False
    """
    try:
        doc = Document(file_path)  # 打開Word文檔
        for para in doc.paragraphs:  # 遍歷文檔中的每個(gè)段落
            if search_text in para.text:  # 檢查段落中是否包含搜索文本
                print(f"在文件 {os.path.basename(file_path)} 的段落中找到: {para.text}")
                return True
        return False  # 如果沒有找到文本,則返回False
    except Exception as e:
        print(f"讀取文件 {file_path} 出錯(cuò): {e}")
        return False  # 捕獲并打印異常信息

def search_in_directory(directory_path, search_text):
    """
    在指定目錄及其子目錄中的所有Word文檔中搜索指定的文本。
    :param directory_path: 要搜索的目錄路徑
    :param search_text: 要搜索的文本
    """
    for root, dirs, files in os.walk(directory_path):  # 遍歷目錄
        for file in files:  # 檢查每個(gè)文件
            if file.endswith('.docx'):  # 只處理Word文檔(.docx格式)
                file_path = os.path.join(root, file)  # 獲取文件的完整路徑
                print(f"正在搜索文件 {os.path.basename(file_path)}...")  # 顯示正在搜索的文件名
                if search_in_docx(file_path, search_text):  # 調(diào)用search_in_docx函數(shù)
                    print(f"在文件 {os.path.basename(file_path)} 中找到了 '{search_text}'")  # 顯示找到的文本

def get_directory_path():
    """
    彈出圖形界面對話框,讓用戶選擇要搜索的目錄。
    :return: 用戶選擇的目錄路徑
    """
    Tk().withdraw()  # 隱藏主窗口
    directory_path = filedialog.askdirectory(title="請選擇要搜索的目錄")  # 彈出選擇文件夾的對話框
    return directory_path  # 返回用戶選擇的目錄路徑

if __name__ == "__main__":
    directory_path = get_directory_path()  # 獲取用戶選擇的目錄路徑
    if directory_path:  # 如果用戶選擇了目錄
        search_text = input("請輸入要搜索的文本: ")  # 獲取用戶輸入的要搜索的文本
        search_in_directory(directory_path, search_text)  # 調(diào)用search_in_directory函數(shù)
    else:
        print("未選擇目錄。")  # 如果用戶沒有選擇目錄,則打印提示信息

函數(shù)解析

search_in_docx:這個(gè)函數(shù)接收文件路徑和要搜索的文本作為參數(shù)。它打開一個(gè).docx文件,并遍歷文件中的所有段落。如果段落中包含指定的文本,則打印出該段落,并返回True。

search_in_directory:這個(gè)函數(shù)接收目錄路徑和要搜索的文本作為參數(shù)。它遍歷指定目錄及其子目錄中的所有文件。如果文件是.docx格式,它將調(diào)用search_in_docx函數(shù)進(jìn)行搜索。如果找到指定的文本,將打印出文件名和搜索結(jié)果。

get_directory_path:這個(gè)函數(shù)使用tkinter庫彈出一個(gè)對話框,讓用戶選擇要搜索的目錄。它隱藏主窗口,并返回用戶選擇的目錄路徑。

主程序:在主程序中,首先調(diào)用get_directory_path函數(shù)獲取用戶選擇的目錄路徑。如果用戶選擇了目錄,程序?qū)⑻崾居脩糨斎胍阉鞯奈谋荆⒄{(diào)用search_in_directory函數(shù)進(jìn)行搜索。如果沒有選擇目錄,程序?qū)⒋蛴〕鱿鄳?yīng)的提示信息。

使用方法

確保你的Python環(huán)境已安裝所需的庫。

將上述代碼保存為一個(gè).py文件。

運(yùn)行該腳本,選擇要搜索的文件夾,然后輸入要搜索的文本。

程序?qū)⒆詣?dòng)搜索指定目錄中的所有.docx文件,并顯示包含指定文本的文件和段落。

知識(shí)擴(kuò)展

Python一鍵為多個(gè)Word文檔設(shè)置連續(xù)頁碼

在處理多個(gè)Word文檔時(shí),我們經(jīng)常需要對這些文檔進(jìn)行連續(xù)頁碼設(shè)置,以便于打印和分發(fā)。手動(dòng)設(shè)置每個(gè)文檔的頁碼不僅耗時(shí),而且容易出錯(cuò)。為了解決這個(gè)問題,我編寫了一個(gè)VBA宏,它可以自動(dòng)為一個(gè)文件夾中的所有Word文檔設(shè)置連續(xù)的頁碼。本文將詳細(xì)介紹這個(gè)宏的工作原理和使用方法。

宏的功能

這個(gè)VBA宏的主要功能是:

  • 允許用戶選擇一個(gè)文件夾,宏將遍歷該文件夾中的所有Word文檔(.docx格式)。
  • 按該文件夾下的文檔順序,為每個(gè)文檔設(shè)置連續(xù)的頁碼,確保文檔之間沒有頁碼重復(fù)且頁碼不中斷。
  • 通過一個(gè)輔助函數(shù)獲取每個(gè)文檔的總頁數(shù),并根據(jù)此信息更新下一個(gè)文檔的起始頁碼。
  • 通過一個(gè)輔助函數(shù)為每個(gè)文檔第一節(jié)設(shè)置起始頁碼,后續(xù)節(jié)為續(xù)前節(jié),且不影響原始頁腳。

宏的實(shí)現(xiàn)

以下是宏的代碼實(shí)現(xiàn),包括兩個(gè)輔助函數(shù)和一個(gè)主過程。

主過程:a設(shè)置連續(xù)頁碼并遍歷文檔

Sub a設(shè)置連續(xù)頁碼并遍歷文檔()
    ' 定義變量用于存儲(chǔ)文件夾路徑
    Dim strFolderPath As String
    ' 創(chuàng)建FileSystemObject對象,用于操作文件系統(tǒng)
    Dim objFSO As Object
    ' 定義變量用于存儲(chǔ)文件夾對象
    Dim objFolder As Object
    ' 定義變量用于存儲(chǔ)文件對象
    Dim objFile As Object
    ' 定義變量用于存儲(chǔ)Word文檔對象
    Dim objDoc As Document
    ' 定義變量用于存儲(chǔ)當(dāng)前頁碼
    Dim iCurrentPage As Integer
    ' 定義變量用于存儲(chǔ)文檔的總頁數(shù)
    Dim iTotalPages As Integer
    ' 定義變量用于存儲(chǔ)之前文檔的總頁數(shù),以便設(shè)置連續(xù)頁碼
    Dim iPreviousTotal As Integer
 
    ' 創(chuàng)建FileSystemObject對象
    Set objFSO = CreateObject("Scripting.FileSystemObject")
 
    ' 使用文件選擇對話框讓用戶選擇文件夾
    With Application.FileDialog(msoFileDialogFolderPicker)
        ' 如果用戶選擇了文件夾
        If .Show = -1 Then
            ' 存儲(chǔ)選擇的文件夾路徑
            strFolderPath = .SelectedItems(1) & "\"
        Else
            ' 如果用戶取消選擇,則顯示消息框并退出宏
            MsgBox "未選擇文件夾,操作已取消。"
            Exit Sub
        End If
    End With
 
    ' 根據(jù)用戶選擇的路徑獲取文件夾對象
    Set objFolder = objFSO.GetFolder(strFolderPath)
 
    ' 初始化當(dāng)前頁碼為1
    iCurrentPage = 1
 
    ' 遍歷文件夾中的所有.docx文件
    For Each objFile In objFolder.Files
        ' 檢查文件擴(kuò)展名是否為docx
        If LCase(objFSO.GetExtensionName(objFile.Name)) = "docx" Then
            ' 打開文檔,不顯示界面
            Set objDoc = Documents.Open(objFile.Path, Visible:=False)
 
            ' 調(diào)用宏設(shè)置頁碼,傳入當(dāng)前頁碼
            Call e自動(dòng)前節(jié)設(shè)置(objDoc, iCurrentPage)
 
            ' 調(diào)用輔助函數(shù)獲取當(dāng)前文檔的總頁數(shù)
            iTotalPages = GetTotalPages(objDoc)
 
            ' 更新當(dāng)前頁碼為下一個(gè)文檔的起始頁碼
            iPreviousTotal = iCurrentPage
            iCurrentPage = iTotalPages + iPreviousTotal
 
            ' 保存并關(guān)閉文檔
            objDoc.Close SaveChanges:=True
        End If
    Next objFile
 
    ' 顯示消息框,告知用戶所有文檔的頁碼設(shè)置完成
    MsgBox "所有文檔的頁碼設(shè)置完成。"
End Sub

輔助函數(shù):GetTotalPages

' 輔助函數(shù),用于獲取文檔的總頁數(shù)
Function GetTotalPages(ByRef oDoc As Document) As Integer
    ' 獲取當(dāng)前文檔的總頁數(shù),返回給調(diào)用者
    GetTotalPages = oDoc.Windows(1).Panes(1).Pages.Count
End Function

輔助函數(shù):e自動(dòng)前節(jié)設(shè)置

' 輔助函數(shù),用于設(shè)置文檔的頁碼
Sub e自動(dòng)前節(jié)設(shè)置(ByRef oDoc As Document, ByRef iStartingPage As Integer)
    Dim oSection As Section
    For Each oSection In oDoc.Sections
        If oSection.Index = 1 Then
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                .NumberStyle = wdPageNumberStyleArabic
                .RestartNumberingAtSection = True
                .StartingNumber = iStartingPage
            End With
        Else
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                .RestartNumberingAtSection = False
            End With
        End If
    Next oSection
End Sub

使用方法

  • 打開Word,按下 Alt + F11 打開VBA編輯器。
  • 插入一個(gè)新的模塊,并將上述代碼粘貼進(jìn)去。
  • 運(yùn)行宏 a設(shè)置連續(xù)頁碼并遍歷文檔。
  • 選擇包含Word文檔的文件夾。
  • 宏將自動(dòng)為每個(gè)文檔設(shè)置連續(xù)頁碼,并在完成后彈出提示消息。

完整代碼

Sub a設(shè)置連續(xù)頁碼并遍歷文檔()
    ' 定義變量用于存儲(chǔ)文件夾路徑
    Dim strFolderPath As String
    ' 創(chuàng)建FileSystemObject對象,用于操作文件系統(tǒng)
    Dim objFSO As Object
    ' 定義變量用于存儲(chǔ)文件夾對象
    Dim objFolder As Object
    ' 定義變量用于存儲(chǔ)文件對象
    Dim objFile As Object
    ' 定義變量用于存儲(chǔ)Word文檔對象
    Dim objDoc As Document
    ' 定義變量用于存儲(chǔ)當(dāng)前頁碼
    Dim iCurrentPage As Integer
    ' 定義變量用于存儲(chǔ)文檔的總頁數(shù)
    Dim iTotalPages As Integer
    ' 定義變量用于存儲(chǔ)之前文檔的總頁數(shù),以便設(shè)置連續(xù)頁碼
    Dim iPreviousTotal As Integer
 
    ' 創(chuàng)建FileSystemObject對象
    Set objFSO = CreateObject("Scripting.FileSystemObject")
 
    ' 使用文件選擇對話框讓用戶選擇文件夾
    With Application.FileDialog(msoFileDialogFolderPicker)
        ' 如果用戶選擇了文件夾
        If .Show = -1 Then
            ' 存儲(chǔ)選擇的文件夾路徑
            strFolderPath = .SelectedItems(1) & "\"
        Else
            ' 如果用戶取消選擇,則顯示消息框并退出宏
            MsgBox "未選擇文件夾,操作已取消。"
            Exit Sub
        End If
    End With
 
    ' 根據(jù)用戶選擇的路徑獲取文件夾對象
    Set objFolder = objFSO.GetFolder(strFolderPath)
 
    ' 初始化當(dāng)前頁碼為1
    iCurrentPage = 1
 
    ' 遍歷文件夾中的所有.docx文件
    For Each objFile In objFolder.Files
        ' 檢查文件擴(kuò)展名是否為docx
        If LCase(objFSO.GetExtensionName(objFile.Name)) = "docx" Then
            ' 打開文檔,不顯示界面
            Set objDoc = Documents.Open(objFile.Path, Visible:=False)
 
            ' 調(diào)用宏設(shè)置頁碼,傳入當(dāng)前頁碼
            Call e自動(dòng)前節(jié)設(shè)置(objDoc, iCurrentPage)
 
            ' 調(diào)用輔助函數(shù)獲取當(dāng)前文檔的總頁數(shù)
            iTotalPages = GetTotalPages(objDoc)
 
            ' 更新當(dāng)前頁碼為下一個(gè)文檔的起始頁碼
            iPreviousTotal = iCurrentPage
            iCurrentPage = iTotalPages + iPreviousTotal
 
            ' 保存并關(guān)閉文檔
            objDoc.Close SaveChanges:=True
        End If
    Next objFile
 
    ' 顯示消息框,告知用戶所有文檔的頁碼設(shè)置完成
    MsgBox "所有文檔的頁碼設(shè)置完成。"
End Sub
 
' 輔助函數(shù),用于獲取文檔的總頁數(shù)
Function GetTotalPages(ByRef oDoc As Document) As Integer
    ' 獲取當(dāng)前文檔的總頁數(shù),返回給調(diào)用者
    GetTotalPages = oDoc.Windows(1).Panes(1).Pages.Count
End Function
 
' 輔助函數(shù),用于設(shè)置文檔的頁碼
Sub e自動(dòng)前節(jié)設(shè)置(ByRef oDoc As Document, ByRef iStartingPage As Integer)
    ' 定義變量用于存儲(chǔ)文檔節(jié)對象
    Dim oSection As Section
    ' 遍歷文檔的所有節(jié)
    For Each oSection In oDoc.Sections
        ' 如果是第一個(gè)節(jié),則設(shè)置頁碼樣式和起始頁碼
        If oSection.Index = 1 Then
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                ' 設(shè)置頁碼樣式為阿拉伯?dāng)?shù)字
                .NumberStyle = wdPageNumberStyleArabic
                ' 設(shè)置在該節(jié)重新開始頁碼編號(hào)
                .RestartNumberingAtSection = True
                ' 設(shè)置起始頁碼
                .StartingNumber = iStartingPage
            End With
        Else
            ' 對于其他節(jié),不重新開始頁碼編號(hào)
            With oSection.Footers(wdHeaderFooterPrimary).PageNumbers
                .RestartNumberingAtSection = False
            End With
        End If
    Next oSection
End Sub

注意事項(xiàng)

  • 確保所有文檔都是Word文檔(.docx格式)。
  • 宏在設(shè)置頁碼時(shí)不會(huì)更改文檔的內(nèi)容。
  • 如果文件夾中包含非Word文檔,宏將忽略這些文件。

到此這篇關(guān)于Python實(shí)現(xiàn)在多個(gè)Word文檔中一鍵搜索的文章就介紹到這了,更多相關(guān)Python多個(gè)Word一鍵搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中函數(shù)相關(guān)的變量作用域

    Python中函數(shù)相關(guān)的變量作用域

    這篇文章主要介紹了Python中函數(shù)相關(guān)的變量作用域,變量的作用域是指程序代碼能夠訪問該變量的區(qū)域,如果超出該區(qū)域,在訪問時(shí)就會(huì)出現(xiàn)錯(cuò)誤,需要的朋友可以參考下
    2023-08-08
  • python單例模式實(shí)例分析

    python單例模式實(shí)例分析

    這篇文章主要介紹了python單例模式,實(shí)例分析了單例模式的原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • python連接并簡單操作SQL?server數(shù)據(jù)庫詳細(xì)步驟

    python連接并簡單操作SQL?server數(shù)據(jù)庫詳細(xì)步驟

    python作為一門十分火熱的編程語言,操作數(shù)據(jù)庫自然是必不可少的,下面這篇文章主要給大家介紹了關(guān)于python連接并簡單操作SQL?server數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Python?Asyncio庫之a(chǎn)syncio.task常用函數(shù)詳解

    Python?Asyncio庫之a(chǎn)syncio.task常用函數(shù)詳解

    Asyncio在經(jīng)過一段時(shí)間的發(fā)展以及獲取Curio等第三方庫的經(jīng)驗(yàn)來提供更多的功能,目前高級(jí)功能也基本完善。本文主要介紹了Asyncio庫中asyncio.task常用函數(shù)的使用,需要的可以參考一下
    2023-03-03
  • 關(guān)于python列表增加元素的三種操作方法

    關(guān)于python列表增加元素的三種操作方法

    這篇文章主要介紹了關(guān)于python列表增加元素的幾種操作方法,主要有insert方法,extend方法和append方法,每種方法給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-08-08
  • Python Gluon參數(shù)和模塊命名操作教程

    Python Gluon參數(shù)和模塊命名操作教程

    這篇文章主要介紹了Python Gluon參數(shù)和模塊命名操作,結(jié)合實(shí)例形式詳細(xì)分析了Python Gluon模塊功能及基本使用技巧,需要的朋友可以參考下
    2019-12-12
  • Python實(shí)現(xiàn)Web指紋識(shí)別實(shí)例

    Python實(shí)現(xiàn)Web指紋識(shí)別實(shí)例

    這篇文章主要來帶大家探索Web指紋識(shí)別:了解主流識(shí)別方式,從標(biāo)題到指紋讀取網(wǎng)站信息的簡單方法,揭秘Web指紋識(shí)別 關(guān)鍵字、哈希和URL的魔力
    2023-10-10
  • python2.6.6如何升級(jí)到python2.7.14

    python2.6.6如何升級(jí)到python2.7.14

    這篇文章主要為大家詳細(xì)介紹了python2.6.6如何升級(jí)到python2.7.14,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解Python中__str__和__repr__方法的區(qū)別

    詳解Python中__str__和__repr__方法的區(qū)別

    這篇文章主要介紹了__str__和__repr__方法的區(qū)別 ,__str__和__repr__是基本的內(nèi)置方法,使用時(shí)的區(qū)別也是Python學(xué)習(xí)當(dāng)中的基礎(chǔ),需要的朋友可以參考下
    2015-04-04
  • Python如何定義有默認(rèn)參數(shù)的函數(shù)

    Python如何定義有默認(rèn)參數(shù)的函數(shù)

    這篇文章主要介紹了Python如何定義有默認(rèn)參數(shù)的函數(shù),幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08

最新評論

滕州市| 瑞丽市| 珠海市| 阜新市| 大田县| 惠州市| 榕江县| 克拉玛依市| 天等县| 永登县| 定西市| 定西市| 佳木斯市| 长沙县| 麻栗坡县| 云梦县| 阜南县| 金山区| 固原市| 鹤庆县| 固阳县| 罗江县| 奈曼旗| 洛宁县| 福海县| 永修县| 沾益县| 太原市| 醴陵市| 潞西市| 汉中市| 根河市| 宽甸| 玛多县| 泗洪县| 昭通市| 白水县| 库车县| 揭阳市| 定安县| 铅山县|