还是我的第一个程序,现在已经升级到4.0了,想想也该给它起个名字了。思来想去,我觉得NX这个名字不错(Number Cut的意思,如果你愿意,也可以把它理解为“牛叉”)。(2010-2-22更正:谢谢Arthas-Cui提醒,以前用NC这个名字的确容易让人误解我脑残或NAZI,所以正式改为NX,)
好,下面开始NX 4.0。
昨天用lambda重写了我删除代码行号的Python工具,也就是NX 3.0(见这里),把行号处理的核心程序减少到了一行。不过看这代码,总有点头重脚轻的感觉:前面那么多PyQt代码就为了生成一个窗体嘛。怎么可以进一步减少代码呢?我想到了剪贴板——Clipboard。如果复制代码后,直接在Clipboard里处理行号不就可以了吗?因此有了下边的基本思路:
第一步:复制代码到剪贴板后,启动我的NX程序
第二步:读取剪贴板的内容到一个str,然后用那行lambda去掉行号,返回一个str。
第三步:把处理后的str写入剪贴板,然后再Ctrl+V,完成任务!
上网搜索了一下Python操作剪贴板的代码,发现了这个。语句很简单,符合我的要求。下边是代码:
# -*- coding: utf-8 -*-
"""
去除代码前行号的Python小工具-Clipboard版
Develop by YanXY
"""
import win32clipboard as c
import win32con as w
import re
c.OpenClipboard() #打开剪贴板
strList = c.GetClipboardData(w.CF_TEXT).splitlines(1) #读取剪贴板内容到一个字符列表
c.EmptyClipboard() #清空剪贴板
c.SetClipboardData(w.CF_TEXT, ''.join(map(lambda x:re.compile \
(r'\D*\d+\s?[.|:|\]|\)]?\s?').sub( '', x,count = 1 ),strList )))
#将去处行号后的字符写回剪贴板,此处用到了lambda语句
c.CloseClipboard() #关闭剪贴板
核心程序只有5行,太NX了!自我陶醉一个;)
使用的时候,先Ctrl+C,然后运行这个py,然后Ctrl+V,是不是很方便?
在此基础上,可以把这个程序作成一个开机启动的系统守护程序,自动监控剪贴板的变化,当然不能和一般的复制/粘贴混淆。这个需要捕捉键盘事件,还不知道Python能不能干这个事。先去查查资料,有时间再写了。
附:《从C#到Python》系列连载目录
从C#到Python —— 谈谈我学习Python一周来的体会
从C#到Python —— 0 前言:进入Python的世界
从C#到Python —— 1 变量和数据类型
从C#到Python —— 2 运算符、表达式和流程控制
从C#到Python —— 3 函数及函数编程
从C#到Python —— 4 类及面向对象
从C#到Python —— 5 模块和包
New! 从C#到Python —— PDF整理版(下载地址)