欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

環(huán)境準備

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

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

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

pip install python-docx

腳本詳解

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

import os  # 導入os模塊,用于文件路徑操作
from tkinter import Tk, filedialog  # 導入Tk和filedialog模塊,用于圖形界面操作
from docx import Document  # 導入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:  # 遍歷文檔中的每個段落
            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} 出錯: {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:  # 檢查每個文件
            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):  # 調用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)  # 調用search_in_directory函數(shù)
    else:
        print("未選擇目錄。")  # 如果用戶沒有選擇目錄,則打印提示信息

函數(shù)解析

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

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

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

主程序:在主程序中,首先調用get_directory_path函數(shù)獲取用戶選擇的目錄路徑。如果用戶選擇了目錄,程序將提示用戶輸入要搜索的文本,并調用search_in_directory函數(shù)進行搜索。如果沒有選擇目錄,程序將打印出相應的提示信息。

使用方法

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

將上述代碼保存為一個.py文件。

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

程序將自動搜索指定目錄中的所有.docx文件,并顯示包含指定文本的文件和段落。

知識擴展

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

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

宏的功能

這個VBA宏的主要功能是:

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

宏的實現(xiàn)

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

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

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

輔助函數(shù):GetTotalPages

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

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

' 輔助函數(shù),用于設置文檔的頁碼
Sub e自動前節(jié)設置(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編輯器。
  • 插入一個新的模塊,并將上述代碼粘貼進去。
  • 運行宏 a設置連續(xù)頁碼并遍歷文檔。
  • 選擇包含Word文檔的文件夾。
  • 宏將自動為每個文檔設置連續(xù)頁碼,并在完成后彈出提示消息。

完整代碼

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

注意事項

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

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

相關文章

  • Python Pillow 圖像處理庫詳解(常用Pillow函數(shù)及其參數(shù))

    Python Pillow 圖像處理庫詳解(常用Pillow函數(shù)及其參數(shù))

    Pillow,原名PIL(Python Imaging Library),是一個功能強大的Python圖像處理庫,支持多種格式,提供豐富的圖像操作功能,如旋轉、縮放、顏色轉換等,以及易于使用的API,Pillow支持廣泛的圖像文件格式,并提供圖像過濾、繪制等功能
    2024-09-09
  • python hmac模塊驗證客戶端的合法性

    python hmac模塊驗證客戶端的合法性

    這篇文章主要介紹了python hmac模塊驗證客戶端的合法性,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • PyTorch的nn.Module類的定義和使用介紹

    PyTorch的nn.Module類的定義和使用介紹

    在PyTorch中,nn.Module類是構建神經(jīng)網(wǎng)絡模型的基礎類,所有自定義的層、模塊或整個神經(jīng)網(wǎng)絡架構都需要繼承自這個類,本文介紹PyTorch的nn.Module類的定義和使用介紹,感興趣的朋友一起看看吧
    2024-01-01
  • python上下文管理器異常問題解決方法

    python上下文管理器異常問題解決方法

    在本篇文章里小編給大家整理的是一篇關于python上下文管理器異常問題解決方法,對此有興趣的朋友們可以學習參考下。
    2021-02-02
  • Python Socket實現(xiàn)簡單TCP Server/client功能示例

    Python Socket實現(xiàn)簡單TCP Server/client功能示例

    這篇文章主要介紹了Python Socket實現(xiàn)簡單TCP Server/client功能,結合實例形式分析了Python基于socket創(chuàng)建TCP服務器Server與客戶端client相關實現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python實現(xiàn)Opencv cv2.Canny()邊緣檢測

    Python實現(xiàn)Opencv cv2.Canny()邊緣檢測

    這篇博客將介紹Canny邊緣檢測的概念,并利用cv2.Canny()實現(xiàn)邊緣檢測,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 對Django中時區(qū)的解讀

    對Django中時區(qū)的解讀

    這篇文章主要介紹了對Django中時區(qū)的解讀方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • python3使用smtplib實現(xiàn)發(fā)送郵件功能

    python3使用smtplib實現(xiàn)發(fā)送郵件功能

    這篇文章主要為大家詳細介紹了python3使用smtplib實現(xiàn)發(fā)送郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • pytorch finetuning 自己的圖片進行訓練操作

    pytorch finetuning 自己的圖片進行訓練操作

    這篇文章主要介紹了pytorch finetuning 自己的圖片進行訓練操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python 使用GDAL實現(xiàn)柵格tif轉矢量shp的方式小結

    python 使用GDAL實現(xiàn)柵格tif轉矢量shp的方式小結

    今天通過本文給大家分享python 使用GDAL實現(xiàn)柵格tif轉矢量shp的方式小結,計劃是使用柵格轉矢量的方式,將柵格數(shù)據(jù)轉為矢量shp文件,然后進行矢量切片,使用Mapbox進行前端動態(tài)渲染,具體內容詳情跟隨小編一起看看吧
    2021-08-08

最新評論