浅析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包的五个简单准则简介
Jun 15 Python
初步认识Python中的列表与位运算符
Oct 12 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 Python
如何分离django中的媒体、静态文件和网页
Nov 12 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
Python中的xlrd模块使用原理解析
May 21 Python
Python中的整除和取模实例
Jun 03 Python
python的launcher用法知识点总结
Aug 07 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
python实现图像高斯金字塔的示例代码
Dec 11 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
php格式化日期实例分析
2014/11/12 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
jQuery循环遍历子节点并获取值的方法
2016/04/14 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
pyramid配置session的方法教程
2013/11/27 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
python 爬虫请求模块requests详解
2020/12/04 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
学生会部长竞聘书
2014/03/31 职场文书
我爱读书演讲稿
2014/05/07 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技