整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

20行Python代码撸一个命令行英语翻译工具

常碰到不认识的英文单词就去有道字典网页去查查看,每次的过程都是“打开有道网页->输入单词->查看结果”,这个过程有点儿繁琐。可是一直不厌其烦的这样重复着,却不想解决一下。。。直到在微博上面看到有个人利用有道翻译API做了个命令行下面的小工具。可是他是用ruby写的,对于Python空来说,这怎么可以呢,于是自己写一个吧,很简单的。

用python实现中英文互译

有道翻译API

http://fanyi.youdao.com/openapi?path=data-mode在这里简单申请一个应用即可。因为这个API有每小时1000次的使用限制,如果都使用我的key就会出现使用次数超限的情况。可以自己申请一个以满足自己的需求。

API使用很简单,传几个参数做一个http请求,返回json格式的结果。

Python实现

具体实现可以看代码:https://github.com/veelion/tt

Python里面做http请求的库很多,最流行和简便的是requests,最开始我也选择了该库。写完运行的时候发现,总是要迟钝一会儿才会出结果。怀疑是requests库内部加载的东西太多,于是换urllib2的urlopen。

Python 2.7下叫urllib2,到了Python 3下面就没有该包了,原来Python 3把它放到urllib.request里面去了,为了让这个小工具同时在2和3下面运行,于是有了这样的代码:

try:
    # For Python 3
    from urllib.request import urlopen
    from urllib.request import quote
except ImportError:
    # For Python 2
    from urllib2 import urlopen
    from urllib import quote

选好http库就写一个函数来做翻译工作:

def trans(q):
    print('translating...')
    url = ('http://fanyi.youdao.com/openapi.do?'
           'keyfrom=%s&key=%s&type=data&'
           'doctype=json&version=1.1&'
           'q=%s') % (YOUDAO_KEYFROM, YOUDAO_KEY, quote(q))
    try:
        r = urlopen(url)
        html = r.read()
        data = json.loads(html)
        if data['errorCode'] != 0:
            print(html)
            return
        print(BRO)  # 设置终端字体颜色
        print("================================")
        print(u"%s -> %s" % (data['query'], ','.join(data['translation'])))
        if 'basic' in data:
            if 'uk-phonetic' in data['basic']:
                print(u"英式发音: %s" % data['basic']['uk-phonetic'])
                print(u"美式发音: %s" % data['basic']['us-phonetic'])
            for e in data['basic']['explains']:
                print(u"%s" % e)
        if 'web' in data:
            print("")
            for e in data['web']:
                print(u"%s -> %s" % (e['key'], ','.join(e['value'])))
        print("================================")
        print(NOR)  # 恢复终端字体颜色
    except:
        traceback.print_exc()

最后,程序从命令行参数得到要被翻译的词,调用翻译函数即可:

if __name__ == '__main__':
    from sys import argv
    if len(argv) > 1:
        q = argv[1]
        trans(q)

以上就是实现翻译小工具的全部过程,很适合初学python的练手实现一下。

安装和使用

上面介绍了翻译小工具的实现过程,如果你只是想使用的话,我已把它发布到pypi上了,你只需使用pip命令安装即可(linux安装):

sudo pip install terminaltranslator

安装程序会在/usr/local/bin/下面生成t和tt两个简洁命令工调用。

windowns用户安装:

pip install terminaltranslator

安装程序会在python的根目录Scripts里生成t.exe和tt.exe 。

使用如下:

python翻译英语

python翻译中文

最后

小编近几年在学习Python!对于想学习Python的朋友们,我想说:很多人学了一个星期就放弃了,为什么呢?其实没有好的学习资料给你去学习,你们是很难坚持的,这是小编收集的Python入门学习资料!如下图回复01即可获得!

TML 标题

HTML 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的。

实例:

<html>

<body>

<h1>张童</h1>

<h2>张童</h2>

<h3>张童</h3>

<h4>张童</h4>

<h5>张童</h5>

<h6>张童</h6>

<p>黄初三年,余朝京师,还济洛川。古人有言,斯水之神,名曰宓妃。感宋玉对楚王神女之事,遂作斯赋。其辞曰:

余从京域,言归东藩。背伊阙,越轘辕,经通谷,陵景山。日既西倾,车殆马烦。尔乃税驾乎蘅皋,秣驷乎芝田,容与乎阳林,流眄乎洛川。于是精移神骇,忽焉思散。俯则未察,仰以殊观,睹一丽人,于岩之畔。乃援御者而告之曰:“尔有觌于彼者乎?彼何人斯?若此之艳也!”御者对曰:“臣闻河洛之神,名曰宓妃。然则君王所见,无乃是乎?其状若何?臣愿闻之。”

余告之曰:“其形也,翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。秾纤得衷,修短合度。肩若削成,腰如约素。延颈秀项,皓质呈露。芳泽无加,铅华弗御。云髻峨峨,修眉联娟。丹唇外朗,皓齿内鲜,明眸善睐,靥辅承权。瑰姿艳逸,仪静体闲。柔情绰态,媚于语言。奇服旷世,骨像应图。披罗衣之璀粲兮,珥瑶碧之华琚。戴金翠之首饰,缀明珠以耀躯。践远游之文履,曳雾绡之轻裾。微幽兰之芳蔼兮,步踟蹰于山隅。

于是忽焉纵体,以遨以嬉。左倚采旄,右荫桂旗。壤皓腕于神浒兮,采湍濑之玄芝。余情悦其淑美兮,心振荡而不怡。无良媒以接欢兮,托微波而通辞。愿诚素之先达兮,解玉佩以要之。嗟佳人之信修,羌习礼而明诗。抗琼珶以和予兮,指潜渊而为期。执眷眷之款实兮,惧斯灵之我欺。感交甫之弃言兮,怅犹豫而狐疑。收和颜而静志兮,申礼防以自持。

于是洛灵感焉,徙倚彷徨,神光离合,乍阴乍阳。竦轻躯以鹤立,若将飞而未翔。践椒涂之郁烈,步蘅薄而流芳。超长吟以永慕兮,声哀厉而弥长。

尔乃众灵杂沓,命俦啸侣,或戏清流,或翔神渚,或采明珠,或拾翠羽。从南湘之二妃,携汉滨之游女。叹匏瓜之无匹兮,咏牵牛之独处。扬轻袿之猗靡兮,翳修袖以延伫。体迅飞凫,飘忽若神,凌波微步,罗袜生尘。动无常则,若危若安。进止难期,若往若还。转眄流精,光润玉颜。含辞未吐,气若幽兰。华容婀娜,令我忘餐。

于是屏翳收风,川后静波。冯夷鸣鼓,女娲清歌。腾文鱼以警乘,鸣玉鸾以偕逝。六龙俨其齐首,载云车之容裔,鲸鲵踊而夹毂,水禽翔而为卫。

于是越北沚。过南冈,纡素领,回清阳,动朱唇以徐言,陈交接之大纲。恨人神之道殊兮,怨盛年之莫当。抗罗袂以掩涕兮,泪流襟之浪浪。悼良会之永绝兮,哀一逝而异乡。无微情以效爱兮,献江南之明珰。虽潜处于太阴,长寄心于君王。忽不悟其所舍,怅神宵而蔽光。

于是背下陵高,足往神留,遗情想像,顾望怀愁。冀灵体之复形,御轻舟而上溯。浮长川而忘返,思绵绵而增慕。夜耿耿而不寐,沾繁霜而至曙。命仆夫而就驾,吾将归乎东路。揽騑辔以抗策,怅盘桓而不能去。</p>

</body>

</html>

写abbreviation

回忆上次折叠的细节

  • 这次了解到了:mkview、:loadview
  • 保存和加载视图
  • 可以把当前的状态保存下来
  • 可以在 viewoption 中配置保存选项,设置哪些需要保存
  • 还可以保存多个视图在整个文档中跳来跳去
  • 视图里面可以有很多本地窗口的设置折叠缩写映射
  • 那么到底什么是缩写(abbreviations)和映射(mappings)呢?

缩写就是abbreviations)

  • 缩写之类的东西我们早就见过:se nu:se[t] nu[mber]
  • 不用都打上,打上缩写形式就自动能好使

  • 类似的还有:%s等价于:%substitute

缩写abbreviation

  • 我们可以快速地定义缩写
  • :abbreviate hi hello这个时候如果输入hi空格hi就自动变成了hello不过目前系统配置有点问题

调整设置

  • 当前系统配置有点问题
  • 需要看一下 ~/.vimrc

  • 把177这句 set paste 是控制粘贴用的
  • 有的时候粘贴出来时对不齐就用 :set paste
  • 粘贴完之后 :set nopaste
  • 现在我们 :set nopaste 确保缩写可以用起来

设置缩写

  • 这有点像颜文字转化工具
  • :abbreviate sml ヾ(❀╹◡╹)ノ~还挺好使 哈哈
  • 还可以使用缩写形式ab:ab o1z oeasy
  • 还可以用来改错:ab teh the
  • 不论是在插入模式下,还是在命令行模式下
  • 只要输入缩写形态,然后加一个空格
  • 就自动完成切换

  • 这个东西其实还是有一定实用性的:ab sysout System.out.println();不过我可以控制最终的光标位置么?

光标的控制

  • 定义新的缩写:ab sysout System.out.println("");<left><left><left>这样就可以在快速得到输出语句之后还把光标放在最合适的位置

  • 这样就可以快速插入一些复杂的语句
  • 那么这个可以换行么?

添加换行符号

  • :ab htmlbase <html><cr><tab><head></head><cr><body></body><cr><backspace></html><up><right><right>

  • 这样就可以快速插入一些更大规模的模板之类的内容
  • 目前有什么缩写abbreviate
  • 可以列表出来么

列出所有的缩写abbreviate

  • ab[breviate]可以列出所有的缩写

  • 第一列代表使用范围! - 全部模式包括输入和命令行i - 输入模式 insertc - 命令行模式 command
  • 单独定义某模式下的ab:iab o1z oeasy 只在插入模式下进行缩写替换:cab o1z oeasy 只在命令模式下进行缩写替换:ab o1z oeasy 在全部模式下都能进行缩写替换

取消缩写

  • :ab先看看有啥
  • :una o1z

  • 再 :ab 发现这个o1z已经删除了
  • 清空 clear
  • :iabc[lear]清空输入(insert)状态下的缩写abbreviate
  • :cabc[lear]清空命令(command)状态下的缩写abbreviate
  • :abc[lear]清空一切状态下的缩写abbreviate

  • 一个个定义映射有点麻烦
  • 我能直接利用曾经写过的单词么?

自动补全

  • 我们的缓冲中有很多已经写出来的单词
  • 我们可以用这些来做自动补全
  • 我们写下S然后按下ctrlp出现一个提示框我们可以选择里面的单词ctrlp - previousctrln - next随着输入的进行还可以缩小查找范围

  • 这个东西也是非常实用的小技巧

总结

  • 这次了解到了:abbrivate缩写
  • 可以定义缩写:ab o1z oeasy这里面还可以包括方向键、回车键之类的东西
  • 可以定义到指定的模式iabcab
  • 查看缩写:ab - 所有的:ab o1z - o1z
  • 自动补全ctrlpctrln
  • 这些缩写都可以保存在视图里保存的选项在viewoption中
  • 可以保存的除了 缩写abbreviate 还有个 映射map
  • 映射map 什么意思呢?
  • 下次再说!

[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (overmind1980/oeasyvim)
[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 Vim_Linux 蓝桥云课)