前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现翻译word表格小程序

python实现翻译word表格小程序

作者头像
砸漏
发布2020-11-05 11:01:53
6800
发布2020-11-05 11:01:53
举报
文章被收录于专栏:恩蓝脚本恩蓝脚本

背景

原是弱电集成的设计员,纠结很久后参加了python培训机构转职后的一员小白,由于一次工作中需要翻译一份近100页word表格,纯手工翻译大概三个小时,为了解决这种重复又耗时的劳动,并重温python相关知识所以制作了该小程序。

脚本详情

代码语言:javascript
复制
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()

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档