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编写的微博应用
Oct 17 Python
单链表反转python实现代码示例
Feb 08 Python
基于DataFrame改变列类型的方法
Jul 25 Python
Python如何发布程序的详细教程
Oct 09 Python
python 图像平移和旋转的实例
Jan 10 Python
python中dict使用方法详解
Jul 17 Python
简单的Python调度器Schedule详解
Aug 30 Python
python [:3] 实现提取数组中的数
Nov 27 Python
python 实现按对象传值
Dec 26 Python
Keras实现DenseNet结构操作
Jul 06 Python
python 基于卡方值分箱算法的实现示例
Jul 17 Python
python如何查找列表中元素的位置
May 30 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
用PHP和ACCESS写聊天室(八)
2006/10/09 PHP
php自定义apk安装包实例
2014/10/20 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
php图片裁剪函数
2018/10/31 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
python写日志封装类实例
2015/06/28 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
2017/04/11 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python实现画圆功能
2018/01/25 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Django实现列表页商品数据返回教程
2020/04/03 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
水务局局长岗位职责
2013/11/28 职场文书
大学新生欢迎词
2014/01/10 职场文书
三个儿子教学反思
2014/02/03 职场文书
质量承诺书格式范文
2015/04/28 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python