1. 程式人生 > 程式設計 >python實現翻譯word表格小程式

python實現翻譯word表格小程式

背景

原是弱電整合的設計員,糾結很久後參加了python培訓機構轉職後的一員小白,由於一次工作中需要翻譯一份近100頁word表格,純手工翻譯大概三個小時,為了解決這種重複又耗時的勞動,並重溫python相關知識所以製作了該小程式。

指令碼詳情

import re
import docx
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options # 匯入chrome選項
from selenium.webdriver.common.keys import Keys
from os import system
'''
seleium爬蟲效率很低但勝在不用考慮反爬問題,由於想加快翻譯速度並實現轉換為exe檔案後可在其他無python環境中執行,
新增excel表格充當資料庫,excel檔案中,一列命名漏洞英文列表,一列命名漏洞翻譯列表,由於使用seleeium需在python目
錄下新增對應瀏覽器driver,由於我使用的是chrome所以需下載chromedriver。
'''
def mydoc(doc,table,huan,expath):
 table_contents = []
 table_content_trans = []
 for i in range(0,len(table.rows)):#設定i值極限 行
  data = pd.DataFrame(pd.read_excel(expath))
  datalist_d = data['漏洞英文列表']
  datalist_t = data['漏洞翻譯列表']
  i_text = table.cell(i,0).text#表格內i行j列單元格內容賦值給i_text
  zhPattern = re.compile(u'[\u4e00-\u9fa5]+') # 中文字元範圍
  szPattern = re.compile(u'[0-9]') # 數字範圍
  # spPattern = re.compile(u'[/]+')
  contents = u'{}'.format(i_text) # 表格內單元格文字
  # search整個字串內查詢模式匹配,找到第一個匹配然後返回一個包含匹配資訊的物件,無則NONE
  # match匹配字串第一位,開頭位置是否匹配,匹配成功才會返回結果,否則返回None
  #'[^?\\/]'返回指定標點符號
  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('漏洞庫中未搜尋到...')
     table_contents.append(i_text) # 表格內內容
     trans_result = myspider(i_text) # 翻譯表格內容
     print('翻譯中...')
     if huan == 1:
      trans_result_n = trans_result.replace("\n","") # 內容去除換行
      table.cell(i,0).text = trans_result_n # 替換表格內容
      table_content_trans.append(trans_result_n) # 翻譯和排版後內容加入表格
      data_t = pd.Series({"漏洞英文列表": i_text,"漏洞翻譯列表": trans_result_n},name='漏洞庫') # 新增資料
      data_add_t = data.append(data_t) # 新增資料
      data_add_t.to_excel(expath,index=False) # 存入excel中
      print('存入漏洞庫...')
     else:
      table.cell(i,0).text = trans_result # 替換表格內容
      table_content_trans.append(trans_result) # 翻譯和排版後內容加入表格
      data_t = pd.Series({"漏洞英文列表": i_text,"漏洞翻譯列表": trans_result},index=False) # 存入excel中
      print('存入漏洞庫...')

   else:
    print('漏洞庫為空')
    table_contents.append(i_text) # 表格內內容
    trans_result = myspider(i_text) # 翻譯表格內容
    print('翻譯中...')
    if huan == 1:
     trans_result_n = trans_result.replace("\n","") # 內容去除換行
     table.cell(i,0).text = trans_result_n # 替換表格內容
     table_content_trans.append(trans_result_n) # 翻譯和排版後內容加入表格
     data_t = pd.Series({"漏洞英文列表": i_text,name='漏洞庫') # 新增資料
     data_add_t = data.append(data_t) # 新增資料
     data_add_t.to_excel(expath,index=False) # 存入excel中
     print('存入漏洞庫...')
    else:
     table.cell(i,0).text = trans_result # 替換表格內容
     table_content_trans.append(trans_result) # 翻譯和排版後內容加入表格
     data_t = pd.Series({"漏洞英文列表": i_text,index=False) # 存入excel中
     print('存入漏洞庫...')

 #判斷列表中是否都是空字串
 flag = False
 for i in table_contents:
  if i.strip() != '':
   flag = True
 # 空列表或者列表中都是空字串不翻譯
 if len(table_contents) == 0 or flag == False:
  return print("此表格無需翻譯或漏洞庫中已儲存")
 else:
  print('表格待翻譯內容:',table_contents)
  print('表格翻譯後內容:',table_content_trans)

def myspider(text):
 # 設定chrome瀏覽器無頭模式
 chrome_options = Options()
 chrome_options.add_argument('--headless')
 driver = webdriver.Chrome(chrome_options=chrome_options)
 # driver.fullscreen_window() #全屏
 driver.maximize_window() # 螢幕最大化
 # 開啟有道翻譯頁面
 driver.get("http://fanyi.youdao.com/")
 time.sleep(0.5)
 # 獲取頁面名為inputOriginal的id標籤的文字內容
 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() # 清除文字框裡的內容
 # outputwd.clear() # 清除文字框裡的內容
 inputwd.send_keys(text) # 輸入翻譯內容
 but.send_keys(Keys.RETURN) # 輸入回車鍵 but.click() #點選按鈕s
 time.sleep(0.5)
 result = outputwd.text
 # 關閉瀏覽器
 driver.quit()
 return result

def mymain():
 # urlname = input('輸入路徑:')
 docname = input('輸入檔案全名:')
 huan = int(input('翻譯內容是否需刪除換行(1.是2.否):'))
 # urlname_t = urlname.replace('\\','\\\\')
 # print('轉義後路徑:',f'{urlname}//{docname}')
 path = f'.\\{docname}' #檔案路徑
 expath = '.\\漏洞庫.xlsx'
 doc = docx.Document(path)
 tables = doc.tables # 獲取檔案中的表格集
 e1 = time.time()
 print(f'共{len(tables)}個表格')
 n = 1
 try:
  for i in range(0,len(tables)):
   table = tables[i]
   mydoc(doc,expath)
   print(f'\n剩餘{len(tables)-n}個表格待翻譯')
   time.sleep(0.3)
   n += 1
   doc.save(f".\\trans{docname}")
 except Exception as e:
  print('報錯:',e)
 e2 = time.time()
 print('耗時:',float(e2 - e1))
 print('轉換完畢')
 system('pause')

mymain()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。