python实现翻译word表格小程序


Posted in Python onFebruary 27, 2020

背景

原是弱电集成的设计员,纠结很久后参加了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比较两个列表大小的方法
Jul 11 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Golang与python线程详解及简单实例
Apr 27 Python
解决python报错MemoryError的问题
Jun 26 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
python basemap 画出经纬度并标定的实例
Jul 09 Python
python getpass实现密文实例详解
Sep 24 Python
python中的itertools的使用详解
Jan 13 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
python编写实现抽奖器
Sep 10 Python
Python统计文本词汇出现次数的实例代码
Feb 27 #Python
浅谈python输出列表元素的所有排列形式
Feb 26 #Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
Feb 26 #Python
python——全排列数的生成方式
Feb 26 #Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 #Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 #Python
python自动点赞功能的实现思路
Feb 26 #Python
You might like
使用cookie实现统计访问者登陆次数
2013/06/08 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
Javascript 判断 object 的特定类转载
2007/02/01 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
jQuery最佳实践完整篇
2011/08/20 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
Harrods美国:英国最大的百货公司
2018/11/04 全球购物
Madewell澳大利亚官方网站:美国休闲服饰品牌
2019/07/18 全球购物
大学生第一学年自我鉴定2015
2014/09/28 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书