国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python批量替換Excel和Word中的關(guān)鍵字

這篇具有很好參考價(jià)值的文章主要介紹了Python批量替換Excel和Word中的關(guān)鍵字。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、問(wèn)題的提出

有時(shí),我們手頭上有多個(gè)Excel或者Word文件,但是領(lǐng)導(dǎo)突然要求對(duì)某幾個(gè)術(shù)語(yǔ)進(jìn)行批量的修改,你是不是有要崩潰的感覺(jué)。因?yàn)檫@么多文件,要一個(gè)一個(gè)地打開(kāi)文件,再進(jìn)行批量替換修改,幾個(gè)文件還好,如果是成百上千的文件,我想你一會(huì)兒就感覺(jué)自己被搞暈了,不僅搞不清修改了沒(méi)有修改完,而且已經(jīng)修改的也不知道修改的徹底不。

于是,問(wèn)題來(lái)了,當(dāng)我需要對(duì)多個(gè)Excel和Word文件中的關(guān)鍵字進(jìn)行替換,而且不改變?cè)募母袷?,同時(shí)刪除源文件,我們?cè)撛趺崔k?這些office文件可能分布在不同的文件夾下,所以替換后還要存放在原來(lái)的文件夾。同時(shí),我們編寫(xiě)的程序還要在Windows和MacOS環(huán)境下都可以使用。

二、算法分析

由于要在多個(gè)環(huán)境下使用,我們放棄VBA,考慮采用Python編程的方法來(lái)解決。

1. 第一步?讀取一個(gè)替換關(guān)鍵字的"批量替換表.xlsx"生成一個(gè)字典,這樣是為了后面可以批量替換。第二步 遍歷當(dāng)前目錄下所有目錄包括上當(dāng)?shù)奈募?,主要是docx和xlsx文件,如果是doc和xls文件,還要考慮兩這兩種格式的文件進(jìn)行批量的轉(zhuǎn)化,見(jiàn)下面的文章 。

批量轉(zhuǎn)doc和xls為docx和xlsx文件

2. 第二步是 遍歷當(dāng)前所有目錄中的文件,用if條件,根據(jù)文件擴(kuò)展名的不同來(lái)篩選出docx和xlsx文件。代碼如下:

    for root, filefolder, files in os.walk(os.curdir):
        for file in files:
            if file.endswith("docx"):
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    word_replace_keywords(file_path, key, value)
            elif file.endswith("xlsx") and os.path.basename(file)!="批量替換表.xlsx":
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    excel_replace_keywords(file_path, key, value)

3. 第三步是對(duì)于docx和xlsx文件分別進(jìn)行替換處理,主要采用了python-docx和openpyxls這兩個(gè)模塊來(lái)進(jìn)行替換。針對(duì)docx文件,我們用Document()來(lái)讀取,用以下代碼來(lái)替換:

def info_update(doc, old, new):
    for para in doc.paragraphs:
        for run in para.runs:
            if old in run.text:
                run.text = run.text.replace(old, new)

對(duì)于xlsx文件我,我們通過(guò)下面的代碼實(shí)現(xiàn)關(guān)鍵字替換,同時(shí)不改變?cè)瓉?lái)關(guān)鍵字的格式。

def replace_cell_text_with_format(cell, keyword, replacement):
    paragraphs = cell.paragraphs
    for paragraph in paragraphs:
        for run in paragraph.runs:
            if keyword in run.text:
                new_text = run.text.replace(keyword, replacement)
                run.clear()  # 清除當(dāng)前文本
                new_run = run._element  # 創(chuàng)建新的run
                new_run.text = new_text  # 設(shè)置新文本
                for key in run._r.attrib.keys():  # 復(fù)制格式屬性
                    if key != 't':
                        new_run.attrib[key] = run._r.attrib[key]

4. 第四步?我們要保存替換后的文件,同時(shí)用os.remove()刪除原來(lái)的文件。

三、代碼展示

最終,我們編制出70多行的代碼,一鍵實(shí)現(xiàn)了多文件、多關(guān)鍵字、保存源格式,又能在Windows和蘋(píng)果電腦環(huán)境使用的程序。代碼如下:

import os
from docx import Document
from openpyxl import load_workbook

def info_update(doc, old, new):
    for para in doc.paragraphs:
        for run in para.runs:
            if old in run.text:
                run.text = run.text.replace(old, new)
                
def replace_cell_text_with_format(cell, keyword, replacement):
    paragraphs = cell.paragraphs
    for paragraph in paragraphs:
        for run in paragraph.runs:
            if keyword in run.text:
                new_text = run.text.replace(keyword, replacement)
                run.clear()  # 清除當(dāng)前文本
                new_run = run._element  # 創(chuàng)建新的run
                new_run.text = new_text  # 設(shè)置新文本
                for key in run._r.attrib.keys():  # 復(fù)制格式屬性
                    if key != 't':
                        new_run.attrib[key] = run._r.attrib[key]
def get_dic():
    workbook = load_workbook('批量替換表.xlsx')
    sht = workbook.active
    dic = {}
    for c1,c2 in zip(sht["A"],sht["B"]):
        if c1.value!= None and c2.value!= None:
            dic[c1.value] = c2.value
    return dic

def word_replace_keywords(file_path, keyword, replacement):
    doc = Document(file_path)
    info_update(doc, keyword, replacement)
    try: 
        for table in doc.tables:
            if not any(cell.text for row in table.rows for cell in row.cells):
                continue  
            for row in table.rows:
                for cell in row.cells:
                    if keyword in cell.text:
                        replace_cell_text_with_format(cell, keyword, replacement)
    except Exception as e:
        print("Error processing table:", e)
            
    doc.save(file_path)

def excel_replace_keywords(file_path, keyword, replacement):
    wb = load_workbook(file_path)
    for sheet_name in wb.sheetnames:
        sheet = wb[sheet_name]
        for row in sheet.iter_rows():
            for cell in row:
                if cell.value and keyword in str(cell.value):
                    cell.value = str(cell.value).replace(keyword, replacement)
    wb.save(file_path)
    wb.close()
    
def get_replaced(dic):    
    for root, filefolder, files in os.walk(os.curdir):
        for file in files:
            if file.endswith("docx"):
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    word_replace_keywords(file_path, key, value)
            elif file.endswith("xlsx") and os.path.basename(file)!="批量替換表.xlsx":
                file_path = os.path.join(root, file)
                for key, value in dic.items():
                    excel_replace_keywords(file_path, key, value)
def main():
    dic = get_dic()
    get_replaced(dic)
if __name__ == "__main__":
    main()

以上代碼的優(yōu)勢(shì)在于:速度快,設(shè)置好關(guān)鍵字后一鍵替換,可以在多個(gè)環(huán)境下使用,相比VBA代碼,Python代碼的執(zhí)行速度更快、操作更簡(jiǎn)單、省時(shí)省力。

四、注意事項(xiàng)

1. 運(yùn)行代碼前一定要安裝Python3.9及以上版本,同時(shí)安裝openpyxl和python-docx兩個(gè)模塊。

2. 執(zhí)行程序前要把doc和xls文件分別轉(zhuǎn)化為docx和xlsx文件,這樣更方便替換。

3. 執(zhí)行前要在程序文件目錄下建立一個(gè)xlsx文件,命名為"批量替換表.xlsx",在表的A列放上要查找的關(guān)鍵字,B列放要替換的關(guān)鍵字。

4. 如果有問(wèn)題,可以隨時(shí)與我聯(lián)系,也可以通過(guò)下面進(jìn)行提問(wèn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-652263.html

到了這里,關(guān)于Python批量替換Excel和Word中的關(guān)鍵字的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python UI自動(dòng)化 —— 關(guān)鍵字+excel表格數(shù)據(jù)驅(qū)動(dòng)

    Python UI自動(dòng)化 —— 關(guān)鍵字+excel表格數(shù)據(jù)驅(qū)動(dòng)

    1. 對(duì)selenium進(jìn)行二次封裝,創(chuàng)建的庫(kù) 2. 準(zhǔn)備一個(gè)表格文件來(lái)寫(xiě)入所有測(cè)試用例步驟 3. 對(duì)表格內(nèi)容進(jìn)行讀取,使用映射關(guān)系來(lái)對(duì)用例進(jìn)行調(diào)用執(zhí)行 ? ? 4. 執(zhí)行用例 1. 對(duì)selenium進(jìn)行二次封裝,創(chuàng)建的庫(kù) 2. 創(chuàng)建一個(gè)表格,寫(xiě)入測(cè)試步驟 將表格放入項(xiàng)目任意路徑下,記

    2024年02月09日
    瀏覽(21)
  • Python 中的==操作符 和 is關(guān)鍵字

    Python 中的==操作符 和 is關(guān)鍵字

    Python是一種功能強(qiáng)大的通用編程語(yǔ)言,提供了各種比較值和對(duì)象的方法。其中包括==操作符和is,它們的用途不同,但由于它們有時(shí)可以達(dá)到相同的目的,所以經(jīng)常會(huì)被混淆。在本文中,我們將深入研究==和is之間的區(qū)別,探索它們?nèi)绾喂ぷ饕约昂螘r(shí)適當(dāng)?shù)厥褂盟鼈儭?/p>

    2024年02月03日
    瀏覽(20)
  • 【python基礎(chǔ)】python中的with關(guān)鍵字及其相關(guān)用法

    【python基礎(chǔ)】python中的with關(guān)鍵字及其相關(guān)用法

    目錄 1.with? 2.上下文管理器? 3.總結(jié) ?4.with torch.no_grad()的用法 在Python中, with 是一個(gè),用于處理上下文管理器(context manager)。上下文管理器是一種對(duì)象,它定義了在進(jìn)入和離開(kāi)某個(gè)上下文時(shí)應(yīng)該執(zhí)行的操作。 with ?語(yǔ)句使代碼更清晰、更具可讀性, 它簡(jiǎn)化了文

    2024年02月16日
    瀏覽(19)
  • 【VSCode】設(shè)置關(guān)鍵字高亮的插件 | Highlight Word

    【VSCode】設(shè)置關(guān)鍵字高亮的插件 | Highlight Word

    本文主要介紹在 VSCode 看代碼時(shí),怎樣使某個(gè)單詞高亮顯示,主要通過(guò)以下三步實(shí)現(xiàn): 安裝 highlight-words 插件 配置 highlight-words 插件 設(shè)置高亮快捷鍵F8 工作是嵌入式開(kāi)發(fā)的,代碼主要是C/C++的,之前一直用 source insight 4 看代碼,最近轉(zhuǎn)到 VSCode ,使用 VSCode 看代碼時(shí),發(fā)現(xiàn)它居

    2024年02月11日
    瀏覽(99)
  • 文件按關(guān)鍵字分組-切割-染色-寫(xiě)入excel

    文件按關(guān)鍵字分組-切割-染色-寫(xiě)入excel

    ??????? 針對(duì)下面的文件data.csv,首先根據(jù)fid進(jìn)行排序,然后分組,使相同fid的記錄放到同一個(gè)excel文件中,并對(duì)每列重復(fù)的數(shù)據(jù)元素染上紅色。 輸出 1. 找到同列重復(fù)元素 2. 插入圖片 3. 同列相同元素染色 輸出

    2024年02月15日
    瀏覽(16)
  • mysql中的關(guān)鍵字

    MySQL是一種流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),包含許多,這些在MySQL中具有特殊的含義,用于執(zhí)行各種數(shù)據(jù)庫(kù)操作。以下是MySQL中的一些及其用法: ADD:用于向現(xiàn)有表添加一列或多列。 ALTER:用于修改表的結(jié)構(gòu),例如更改列名、更改列的數(shù)據(jù)類(lèi)型、修改索

    2024年02月16日
    瀏覽(22)
  • Rust中的關(guān)鍵字

    嚴(yán)格 as - 強(qiáng)制類(lèi)型轉(zhuǎn)換,消除特定包含項(xiàng)的 trait 的歧義,或者對(duì) use 和 extern crate 語(yǔ)句中的項(xiàng)重命名 async - 返回一個(gè) Future 而不是阻塞當(dāng)前線程( 2018版新增) await - 暫停執(zhí)行直到 Future 的結(jié)果就緒( 2018版新增) break - 立刻退出循環(huán) const - 定義常量或不變裸指針(constant raw

    2024年02月07日
    瀏覽(28)
  • C#中的ref關(guān)鍵字

    1、傳遞的是參數(shù)的值(數(shù)據(jù)的副本)而不是原始數(shù)據(jù)本身。 2、函數(shù)內(nèi)部對(duì)值參數(shù)的修改不會(huì)影響到原始數(shù)據(jù)。 3、通常用于傳遞基本數(shù)據(jù)類(lèi)型(如整數(shù)、浮點(diǎn)數(shù)、布爾值)或不可變對(duì)象(如字符串、元組)。 4、值參數(shù)的傳遞是一種傳值調(diào)用(Call by Value)。 示例代碼 運(yùn)行結(jié)

    2024年02月05日
    瀏覽(25)
  • C#中的`out`關(guān)鍵字

    C# 中的 out 是一個(gè)用來(lái)在方法調(diào)用時(shí)傳遞數(shù)據(jù)的修飾符。它允許你在方法內(nèi)部創(chuàng)建一個(gè)臨時(shí)的變量,用于接收傳遞進(jìn)來(lái)的參數(shù)值,并在方法執(zhí)行完畢后,將該變量的值返回給調(diào)用方法的對(duì)象。out 主要用于那些需要知道方法執(zhí)行結(jié)果的參數(shù)上。 在 C# 中,out

    2024年02月22日
    瀏覽(95)
  • MySQL中的COLLATE關(guān)鍵字

    Collation in MySQL refers to the set of rules used to compare and sort characters in a particular character set. It determines how strings are compared and ordered based on their characters’ linguistic and cultural rules. Collation settings affect operations such as sorting, searching, and comparing strings in MySQL queries. In MySQL, collation can be spec

    2024年02月12日
    瀏覽(86)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包