python实现翻译word表格小程序

所属分类: 脚本专栏 / python 阅读数: 1282
收藏 0 赞 0 分享

背景

原是弱电集成的设计员,纠结很久后参加了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}, name='漏洞库') # 添加数据
  data_add_t = data.append(data_t) # 添加数据
  data_add_t.to_excel(expath, 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,"漏洞翻译列表": 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}, name='漏洞库') # 添加数据
  data_add_t = data.append(data_t) # 添加数据
  data_add_t.to_excel(expath, 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,table,huan,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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Python实现图像几何变换

这篇文章主要介绍了Python实现图像几何变换的方法,实例分析了Python基于Image模块实现图像翻转、旋转、改变大小等操作的相关技巧,非常简单实用,需要的朋友可以参考下
收藏 0 赞 0 分享

Python中的urllib模块使用详解

这篇文章主要介绍了Python中的urllib模块使用详解,是Python入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

Python的多态性实例分析

这篇文章主要介绍了Python的多态性,以实例形式深入浅出的分析了Python在面向对象编程中多态性的原理与实现方法,需要的朋友可以参考下
收藏 0 赞 0 分享

python生成IP段的方法

这篇文章主要介绍了python生成IP段的方法,涉及Python文件读写及随机数操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

python操作redis的方法

这篇文章主要介绍了python操作redis的方法,包括Python针对redis的连接、设置、获取、删除等常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

python妹子图简单爬虫实例

这篇文章主要介绍了python妹子图简单爬虫,实例分析了Python爬虫程序所涉及的页面源码获取、进度显示、正则匹配等技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

分析用Python脚本关闭文件操作的机制

这篇文章主要介绍了分析用Python脚本关闭文件操作的机制,作者分Python2.x版本和3.x版本两种情况进行了阐述,需要的朋友可以参考下
收藏 0 赞 0 分享

python实现搜索指定目录下文件及文件内搜索指定关键词的方法

这篇文章主要介绍了python实现搜索指定目录下文件及文件内搜索指定关键词的方法,可实现针对文件夹及文件内关键词的搜索功能,需要的朋友可以参考下
收藏 0 赞 0 分享

python中getaddrinfo()基本用法实例分析

这篇文章主要介绍了python中getaddrinfo()基本用法,实例分析了Python中使用getaddrinfo方法进行IP地址解析的基本技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

python查找指定具有相同内容文件的方法

这篇文章主要介绍了python查找指定具有相同内容文件的方法,涉及Python针对文件操作的相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多