python實(shí)現(xiàn)翻譯word表格小程序
背景
原是弱電集成的設(shè)計(jì)員,糾結(jié)很久后參加了python培訓(xùn)機(jī)構(gòu)轉(zhuǎn)職后的一員小白,由于一次工作中需要翻譯一份近100頁(yè)word表格,純手工翻譯大概三個(gè)小時(shí),為了解決這種重復(fù)又耗時(shí)的勞動(dòng),并重溫python相關(guān)知識(shí)所以制作了該小程序。
腳本詳情
import re import docx import time import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.options import Options # 導(dǎo)入chrome選項(xiàng) from selenium.webdriver.common.keys import Keys from os import system ''' seleium爬蟲(chóng)效率很低但勝在不用考慮反爬問(wèn)題,由于想加快翻譯速度并實(shí)現(xiàn)轉(zhuǎn)換為exe文件后可在其他無(wú)python環(huán)境中運(yùn)行, 添加excel表格充當(dāng)數(shù)據(jù)庫(kù),excel文件中,一列命名漏洞英文列表,一列命名漏洞翻譯列表,由于使用seleeium需在python目 錄下添加對(duì)應(yīng)瀏覽器driver,由于我使用的是chrome所以需下載chromedriver。 ''' def mydoc(doc,table,huan,expath): table_contents = [] table_content_trans = [] for i in range(0,len(table.rows)):#設(shè)定i值極限 行 data = pd.DataFrame(pd.read_excel(expath)) datalist_d = data['漏洞英文列表'] datalist_t = data['漏洞翻譯列表'] i_text = table.cell(i,0).text#表格內(nèi)i行j列單元格內(nèi)容賦值給i_text zhPattern = re.compile(u'[\u4e00-\u9fa5]+') # 中文字符范圍 szPattern = re.compile(u'[0-9]') # 數(shù)字范圍 # spPattern = re.compile(u'[/]+') contents = u'{}'.format(i_text) # 表格內(nèi)單元格文本 # search整個(gè)字符串內(nèi)查找模式匹配,找到第一個(gè)匹配然后返回一個(gè)包含匹配信息的對(duì)象,無(wú)則NONE # match匹配字符串第一位,開(kāi)頭位置是否匹配,匹配成功才會(huì)返回結(jié)果,否則返回None #'[^?\\/]'返回指定標(biāo)點(diǎn)符號(hào) match_zh = zhPattern.search(contents) match_sz = szPattern.match(contents) if match_zh or match_sz: pass else: if len(datalist_d) != 0: flag_excel = False for j in range(len(datalist_d)): if datalist_d[j] == i_text: table.cell(i,0).text = str(datalist_t[j]) flag_excel = True break if flag_excel == False: print('漏洞庫(kù)中未搜索到...') table_contents.append(i_text) # 表格內(nèi)內(nèi)容 trans_result = myspider(i_text) # 翻譯表格內(nèi)容 print('翻譯中...') if huan == 1: trans_result_n = trans_result.replace("\n", "") # 內(nèi)容去除換行 table.cell(i, 0).text = trans_result_n # 替換表格內(nèi)容 table_content_trans.append(trans_result_n) # 翻譯和排版后內(nèi)容加入表格 data_t = pd.Series({"漏洞英文列表": i_text,"漏洞翻譯列表": trans_result_n}, name='漏洞庫(kù)') # 添加數(shù)據(jù) data_add_t = data.append(data_t) # 添加數(shù)據(jù) data_add_t.to_excel(expath, index=False) # 存入excel中 print('存入漏洞庫(kù)...') else: table.cell(i, 0).text = trans_result # 替換表格內(nèi)容 table_content_trans.append(trans_result) # 翻譯和排版后內(nèi)容加入表格 data_t = pd.Series({"漏洞英文列表": i_text,"漏洞翻譯列表": trans_result}, name='漏洞庫(kù)') # 添加數(shù)據(jù) data_add_t = data.append(data_t) # 添加數(shù)據(jù) data_add_t.to_excel(expath, index=False) # 存入excel中 print('存入漏洞庫(kù)...') else: print('漏洞庫(kù)為空') table_contents.append(i_text) # 表格內(nèi)內(nèi)容 trans_result = myspider(i_text) # 翻譯表格內(nèi)容 print('翻譯中...') if huan == 1: trans_result_n = trans_result.replace("\n", "") # 內(nèi)容去除換行 table.cell(i, 0).text = trans_result_n # 替換表格內(nèi)容 table_content_trans.append(trans_result_n) # 翻譯和排版后內(nèi)容加入表格 data_t = pd.Series({"漏洞英文列表": i_text,"漏洞翻譯列表": trans_result_n}, name='漏洞庫(kù)') # 添加數(shù)據(jù) data_add_t = data.append(data_t) # 添加數(shù)據(jù) data_add_t.to_excel(expath, index=False) # 存入excel中 print('存入漏洞庫(kù)...') else: table.cell(i, 0).text = trans_result # 替換表格內(nèi)容 table_content_trans.append(trans_result) # 翻譯和排版后內(nèi)容加入表格 data_t = pd.Series({"漏洞英文列表": i_text,"漏洞翻譯列表": trans_result}, name='漏洞庫(kù)') # 添加數(shù)據(jù) data_add_t = data.append(data_t) # 添加數(shù)據(jù) data_add_t.to_excel(expath, index=False) # 存入excel中 print('存入漏洞庫(kù)...') #判斷列表中是否都是空字符串 flag = False for i in table_contents: if i.strip() != '': flag = True # 空列表或者列表中都是空字符串不翻譯 if len(table_contents) == 0 or flag == False: return print("此表格無(wú)需翻譯或漏洞庫(kù)中已存儲(chǔ)") else: print('表格待翻譯內(nèi)容:',table_contents) print('表格翻譯后內(nèi)容:',table_content_trans) def myspider(text): # 設(shè)置chrome瀏覽器無(wú)頭模式 chrome_options = Options() chrome_options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=chrome_options) # driver.fullscreen_window() #全屏 driver.maximize_window() # 屏幕最大化 # 打開(kāi)有道翻譯頁(yè)面 driver.get("http://fanyi.youdao.com/") time.sleep(0.5) # 獲取頁(yè)面名為inputOriginal的id標(biāo)簽的文本內(nèi)容 inputwd = driver.find_element_by_id("inputOriginal") # 搜索輸入文本框的id屬性值 .text #id="wrapper"的所有文本 but = driver.find_element_by_id('transMachine') # 搜索提交按鈕//*[@id="transMachine"] outputwd = driver.find_element_by_xpath('//*[@id="transTarget"]') # 翻譯后文本框 inputwd.clear() # 清除文本框里的內(nèi)容 # outputwd.clear() # 清除文本框里的內(nèi)容 inputwd.send_keys(text) # 輸入翻譯內(nèi)容 but.send_keys(Keys.RETURN) # 輸入回車(chē)鍵 but.click() #點(diǎn)擊按鈕s time.sleep(0.5) result = outputwd.text # 關(guān)閉瀏覽器 driver.quit() return result def mymain(): # urlname = input('輸入路徑:') docname = input('輸入文件全名:') huan = int(input('翻譯內(nèi)容是否需刪除換行(1.是2.否):')) # urlname_t = urlname.replace('\\','\\\\') # print('轉(zhuǎn)義后路徑:',f'{urlname}//{docname}') path = f'.\\{docname}' #文件路徑 expath = '.\\漏洞庫(kù).xlsx' doc = docx.Document(path) tables = doc.tables # 獲取文件中的表格集 e1 = time.time() print(f'共{len(tables)}個(gè)表格') n = 1 try: for i in range(0,len(tables)): table = tables[i] mydoc(doc,table,huan,expath) print(f'\n剩余{len(tables)-n}個(gè)表格待翻譯') time.sleep(0.3) n += 1 doc.save(f".\\trans{docname}") except Exception as e: print('報(bào)錯(cuò):',e) e2 = time.time() print('耗時(shí):',float(e2 - e1)) print('轉(zhuǎn)換完畢') system('pause') mymain()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python利用google翻譯方法實(shí)例(翻譯字幕文件)
- Python使用requests模塊爬取百度翻譯
- Python爬蟲(chóng)實(shí)現(xiàn)百度翻譯功能過(guò)程詳解
- Python如何通過(guò)百度翻譯API實(shí)現(xiàn)翻譯功能
- python如何提取英語(yǔ)pdf內(nèi)容并翻譯
- python實(shí)現(xiàn)在線(xiàn)翻譯功能
- Python實(shí)現(xiàn)桌面翻譯工具【新手必學(xué)】
- Python實(shí)現(xiàn)圖片識(shí)別加翻譯功能
- python批量將excel內(nèi)容進(jìn)行翻譯寫(xiě)入功能
- python制作英語(yǔ)翻譯小工具代碼實(shí)例
- Python 實(shí)現(xiàn)的 Google 批量翻譯功能
- python開(kāi)發(fā)一款翻譯工具
相關(guān)文章
python selenium登錄豆瓣網(wǎng)過(guò)程解析
這篇文章主要介紹了python selenium登錄豆瓣網(wǎng)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python淺析多態(tài)與鴨子類(lèi)型使用實(shí)例
python是一門(mén)解釋語(yǔ)言,但是同java等靜態(tài)語(yǔ)言一樣,是可以通過(guò)繼承的方式實(shí)現(xiàn)多態(tài)。而且python還有一個(gè)自己的特殊實(shí)現(xiàn)多態(tài)的方法,就是通過(guò)鴨子類(lèi)型,來(lái)實(shí)現(xiàn)多態(tài)2022-10-10Python Tkinter簡(jiǎn)單布局實(shí)例教程
這篇文章主要介紹了Python Tkinter簡(jiǎn)單布局實(shí)例教程,包括了填充、左右布局、絕對(duì)布局、網(wǎng)格布局等,需要的朋友可以參考下2014-09-09Python之NumPy(axis=0 與axis=1)區(qū)分詳解
這篇文章主要介紹了Python之NumPy(axis=0 與axis=1)區(qū)分詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python連接打印機(jī)實(shí)現(xiàn)自動(dòng)化打印的實(shí)用技巧和示例代碼
在計(jì)算機(jī)科學(xué)領(lǐng)域,打印機(jī)是一種重要的外部設(shè)備,用于將電子文檔轉(zhuǎn)換成實(shí)際的紙質(zhì)文件,下面這篇文章主要給大家介紹了關(guān)于Python連接打印機(jī)實(shí)現(xiàn)自動(dòng)化打印的實(shí)用技巧和示例代碼,需要的朋友可以參考下2024-05-05python函數(shù)缺省值與引用學(xué)習(xí)筆記分享
有關(guān)一個(gè)在函數(shù)參數(shù)設(shè)置缺省值與引用的問(wèn)題,這個(gè)問(wèn)題是大多數(shù)Pythoner可能會(huì)忽視的問(wèn)題,作個(gè)筆記,以備后閱,同時(shí)供需要的朋友參考2013-02-02python的input,print,eval函數(shù)概述
這篇文章主要為大家概述了python的input,print,eval函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01Pandas使用query()優(yōu)雅的查詢(xún)實(shí)例
本文主要介紹了Pandas使用query()優(yōu)雅的查詢(xún)實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01