Python FreshMan

★☆ Python新手的Blog ☆★
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

删除代码行号的Python小工具——Clipboard版

Posted on 2010-02-22 08:08  闫小勇  阅读(1658)  评论(5编辑  收藏  举报

还是我的第一个程序,现在已经升级到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操作剪贴板的代码,发现了这个。语句很简单,符合我的要求。下边是代码:

 

Clipboard
# -*- 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能不能干这个事。先去查查资料,有时间再写了。