浅析Python 实现一个自动化翻译和替换的工具


Posted in Python onApril 14, 2019

一个可能你似曾相识的场景

阅读内容包含大量英文的 PPT、Word、Excel 或者记事本时,由于英语不熟悉,为了流利地阅读,需要打开浏览器进入谷歌翻译的主界面,然后把英文复制到谷歌翻译的输入框中,最后又把翻译结果复制回 PPT、Word 和 Excel。

浅析Python 实现一个自动化翻译和替换的工具

浅析Python 实现一个自动化翻译和替换的工具

要是一个两个单词还好,要是发现有 100 个单词不认识,就必须复制粘贴 200 次,如此机械性重复性的工作,应该交给程序来做,这就是我设计下面这个自动化翻译工具的初衷。

提升办公效率的法宝

浅析Python 实现一个自动化翻译和替换的工具

如上图所示,运行程序并保持后台运行,在电脑上的任何一个软件中选择一段文本,并 Ctrl + C 复制到系统剪贴板中,程序就会自动帮助我们完成翻译,并将翻译结果自动复制到系统剪贴版中,只需 Ctrl + V,就完成了翻译结果对原文的替换。

编码实现

程序主要分为两部分,第一部分为谷歌翻译爬虫,第二部分就是实现这个将翻译结果自动替换的业务逻辑。

谷歌翻译爬虫

通过浏览器 F12 开发者工具,很容易定位到翻译请求的URL:http://translate.google.cn/translate_a/single?client=t&sl=en&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2

这个请求接受两个参数,一个就是我们要翻译的字符串 q,另一个是用于用户认证的 tk(token),其中 q 很容易构造,tk 的构造就需要花费一番心力了,需要我们调试 js 代码,这里参考 Github 上大神的轮子: https://github.com/cocoa520/Google_TK

谷歌翻译爬虫的主要代码如下:

def translate(tk, content): 
 if len(content) > 4891: 
  print("too long to translate")
   return 
 param = {'tk': tk, 'q': content} 
 result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en  
&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss  
 &dt=t&ie=UTF-8&oe=UTF-8&clearbtn=1&otf=1&pc=1&srcrom=0&ssel=0&tsel=0&kc=2""", params=param) 
data = result.json()
 print(data[0][0][0])

返回结果是 json 形式的,翻译结果保存在结果的第一个元组中。

Python 操作系统剪贴板

将读取剪贴板的内容的代码封装成函数如下:

def getText():#读取剪切板
  # 打开剪贴板
  w.OpenClipboard()
 # 读取剪贴板的内容 
 d = w.GetClipboardData(win32con.CF_TEXT)
  # 关闭剪贴板
  w.CloseClipboard()
 try:  
return d.decode('utf-8')
 except:  
 return d.decode('gbk')

返回值 d 是字节类型的,需要解码,中文按 gbk 格式解码,英文按 utf-8 解码。

类似地,写入剪贴板的代码如下:

def setText(aString):#写入剪切板
 # 打开剪贴板
 w.OpenClipboard()
 # 清空剪贴板
 w.EmptyClipboard()
 # 写入剪贴板
 w.SetClipboardText(aString)
 # 关闭剪贴板
 w.CloseClipboard()

实现将翻译结果自动替换原文的逻辑的代码如下:

while(True):
   # 如果剪贴板正在被占用 
  try:
   cs = getText() 
  except: 
   time.sleep(1)
    cs = getText() 
  print('cs',cs) 
  if cs and cs != ls:
   print('准备翻译')
   content = getText()  
 tk = js.getTk(content)
   res = translate(tk, content)14   setText(res)
   time.sleep(1)
   ls = res

值得注意的是,系统剪贴板对象是单例模式的,在操作系统范围内只有一个,而且读写剪贴板都是互斥的,在读(写)剪贴板的同时不允许任何对剪贴板的写(读)操作。试想这样一种情景,我们在其他软件中 Ctrl + C 写入剪贴板,而此时我们的程序代码正好执行到读剪贴板那一行,毫无疑问会报错,我的解决办法是使用 try…except 语句延时 1 s再读取,这样可以大大降低读写碰撞的概率,但无疑消耗了程序性能。

总结

以上所述是小编给大家介绍的Python 实现一个自动化翻译和替换的工具,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家!

Python 相关文章推荐
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
python基础练习之几个简单的游戏
Nov 10 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
python实现合并两个排序的链表
Mar 03 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
详解python logging日志传输
Jul 01 Python
python 实现IP子网计算
Feb 18 Python
详解Python牛顿插值法
May 11 Python
TensorFlow的自动求导原理分析
May 26 Python
提升Python程序性能的7个习惯
Apr 14 #Python
Python根据当前日期取去年同星期日期
Apr 14 #Python
Python实现的微信支付方式总结【三种方式】
Apr 13 #Python
Python实现合并excel表格的方法分析
Apr 13 #Python
Python Image模块基本图像处理操作小结
Apr 13 #Python
python使用pymongo操作mongo的完整步骤
Apr 13 #Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 #Python
You might like
html中select语句读取mysql表中内容
2006/10/09 PHP
php的ajax简单实例
2014/02/27 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
python的Tqdm模块的使用
2018/01/10 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
python读取tif图片时保留其16bit的编码格式实例
2020/01/13 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
Unix如何在一行中运行多个命令
2015/05/29 面试题
转学证明范本
2015/06/19 职场文书
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
Java 在线考试云平台的实现
2021/11/23 Java/Android