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 09 Python
Python numpy 常用函数总结
Dec 07 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
python距离测量的方法
Mar 06 Python
python实现日常记账本小程序
Mar 10 Python
pandas series序列转化为星期几的实例
Apr 11 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 Python
Python使用PyYAML库读写yaml文件的方法
Apr 06 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
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
实例讲解yii2.0在php命令行中运行的步骤
2015/12/01 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
Python入门篇之函数
2014/10/20 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
python脚本监控docker容器
2016/04/27 Python
python http接口自动化脚本详解
2018/01/02 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
python如何删除列为空的行
2020/07/17 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
2015年学生管理工作总结
2015/05/26 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL