使用场景:
复制粘贴在我们的日常工作中使用率极高,~毕竟我们都是面向ctrl+c和ctrl+v编程~
比如说用SQL导数据,
某天同事扔给你一份疑似开挂的用户id,让你查一下他们的充值金额
这对你当然不是个难事,基本的SQL就可以搞定,
1select user_id,pay_amount from some_table
2where user_id in ()
因为要经常调用,你甚至都保存好了模板
但是在数据库里用户id是字符类型,而你Excel复制出来的话是整数形式
我们怎么才能快捷地批量添加单引号和逗号?这就是本文的主题了
1. 利用Sublime Text 3的快捷键
文字版:
Ctrl+a 全选 --> Ctrl+Shift+L 多行编辑 --> 单引号 --> End 跳转到每行的末尾 --> 逗号 --> Ctrl+End
跳转到整个文本的最后 --> 退格键 删掉最后一个逗号
这种方法将用户id从Excel复制到Sublime,然后通过快捷键完成操作,看起来有点繁琐,但是熟练快捷键后整个操作很快就能完成。
不过这种方法有个弊端,就是受限于Sublime的性能,当数据到了1万以上,快捷键批量处理就会很卡
所以当数据量比较大的时候,我们采取第二种方法
2. 利用Excel公式
如图所示,A列为用户id,在B1单元格,我们输入两个英文的单引号;(因为在Excel里,单元格开头的单引号是文本的象征,所以如果我们只输入一个单引号,这意味着这个单元格是个空字符串)
在C1单元格,我们输入一个逗号;接着我们就可以利用“&”来拼接字符串了
公式如下(注意B1和C1要绝对引用)
1=$B$1&A1&$B$1&$C$1
写好公式后,直接往下拖拽就好了
这种方法相比Sublime的快捷键,会麻烦一点,但是有两个优势
- 大部分人都没有安装Sublime,但几乎每台电脑都装有Excel或WPS
- 当行数上万的时候,Sublime的多行模式就会很卡了,而对Excel来说,10万行秒出结果
但是当id数量达到100万的时候,Excel的公式拖拽也变得很慢了,实测100万行要55秒才完成
于是有了方法3
3. 用Python实现
首先我们要介绍一个操作剪贴板的模块——pyperclip
安装:pip instasll pyperclip
这个模块有两个函数:
- copy(), 向剪贴板发送文本
- paste(), 从剪贴板接收文本
用法示例:
首先用copy函数来发送文本到剪贴板(即复制内容),然后把从剪贴板接收的内容(即粘贴内容),打印出来
这时候你用ctrl+v粘贴,出来的文本也是“Python从放弃到真香”
如果你不用copy方法,直接用paste的话,会打印出你剪贴板的文本,也就是你上一次复制的内容。
总结一下,pyperclip的用法就是和剪贴板相关联(仅限文本),copy了什么内容,就会原封不动的paste什么内容。
当然到目前为止,我们这个用Python实现的复制粘贴并没有能够优化系统剪贴板的功能,甚至还不如后者(因为只能复制文本),不着急,我们继续完善代码。
引入pyperclip这个模块,主要是为了和剪贴板相通,也就是实现复制-粘贴,我们还要在中间加一个编辑文本的功能,
即复制-编辑-粘贴,这个编辑功能我们利用Python的字符串操作完成
先举个例子:
比如说我要把复制的文本全部倒过来粘贴,怎么实现呢?
1import pyperclip
2
3s = pyperclip.paste()
4s_ = s[::-1]
5pyperclip.copy(s_)
效果图:
下面进入正题,如何将Excel上面的id批量加上单引号和逗号
首先,复制Excel上的5个id,粘贴出来研究
发现每个id后面都有个空行,且末尾空了两行
利用内置函数repr()查看它的真实面目
原来每个id后面都有个rn,这时我们选择用rn作为分隔符
由于最后有一个空值,我们把空值去掉(其实不去空值,也不影响后面操作)
1import pyperclip
2
3s = pyperclip.paste()
4s_ = s.split('rn')
5
6list_ = []
7for i in s_:
8 if i:
9 list_.append(i)
10print(list_)
如果用列表推导式的话,看起来会简练很多
1import pyperclip
2
3s = pyperclip.paste()
4list_ = [i for i in s.split('rn') if i]
5print(list_)
每个id的两端都加上单引号,末尾加逗号,注意单引号要转义
用换行符(n)连接每个id,转换为字符串
用切片删掉最末尾的一个引号
1 s_ = 'n'.join(list_)[:-1]
最后,把处理后的字符串发送给剪贴板
1import pyperclip
2
3s = pyperclip.paste()
4list_ = [''' + i + '''+',' for i in s.split('rn') if i]
5s_ = 'n'.join(list_)[:-1]
6pyperclip.copy(s_)
测试一下:
大功告成!
实测100w个id:
一秒内完成!
虽然我们通过剪贴板加上字符处理,实现的功能很强大,但是使用起来还是有些繁琐
复制——打开py文件——运行——粘贴
如果能把中间的两步合成一步,那么用户体验无疑会提升很多、
我想到的方法是编写一个bat,然后用快捷键调用(抛砖引玉)
具体步骤:
在py文件的同一个目录下建立一个txt,写入 python 自动加单引号和逗号.py
然后把后缀改成bat
发送bat的快捷方式到桌面
右键属性,设置快捷键
好了,最终,整个流程变为:复制——快捷键——粘贴
exe文件通过发送快捷方式到桌面,同样可以设置快捷键