python实现翻译word表格小程序
背景
原是弱电集成的设计员,纠结很久后参加了python培训机构转职后的一员小白,由于一次工作中需要翻译一份近100页word表格,纯手工翻译大概三个小时,为了解决这种重复又耗时的劳动,并重温python相关知识所以制作了该小程序。
脚本详情
importre importdocx importtime importpandasaspd fromseleniumimportwebdriver fromselenium.webdriver.chrome.optionsimportOptions#导入chrome选项 fromselenium.webdriver.common.keysimportKeys fromosimportsystem ''' seleium爬虫效率很低但胜在不用考虑反爬问题,由于想加快翻译速度并实现转换为exe文件后可在其他无python环境中运行, 添加excel表格充当数据库,excel文件中,一列命名漏洞英文列表,一列命名漏洞翻译列表,由于使用seleeium需在python目 录下添加对应浏览器driver,由于我使用的是chrome所以需下载chromedriver。 ''' defmydoc(doc,table,huan,expath): table_contents=[] table_content_trans=[] foriinrange(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) ifmatch_zhormatch_sz: pass else: iflen(datalist_d)!=0: flag_excel=False forjinrange(len(datalist_d)): ifdatalist_d[j]==i_text: table.cell(i,0).text=str(datalist_t[j]) flag_excel=True break ifflag_excel==False: print('漏洞库中未搜索到...') table_contents.append(i_text)#表格内内容 trans_result=myspider(i_text)#翻译表格内容 print('翻译中...') ifhuan==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('翻译中...') ifhuan==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 foriintable_contents: ifi.strip()!='': flag=True #空列表或者列表中都是空字符串不翻译 iflen(table_contents)==0orflag==False: returnprint("此表格无需翻译或漏洞库中已存储") else: print('表格待翻译内容:',table_contents) print('表格翻译后内容:',table_content_trans) defmyspider(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() returnresult defmymain(): #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: foriinrange(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}") exceptExceptionase: print('报错:',e) e2=time.time() print('耗时:',float(e2-e1)) print('转换完毕') system('pause') mymain()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。