利用python监听剪贴板内容,并修改。

前言

由于我在读论文的时候常常需要复制论文片段,然后论文(pdf格式)中常常有多余的换行符,所以粘贴到txt或者markdown文本中都会很不美观,我希望能利用python脚本把换行符去掉,在此记录过程。

预期要实现的功能:
1)复制一个pdf中的论文片段,没处理之前是这样:
在这里插入图片描述

无论是放到博客中还是保存到txt中,感觉阅读起来都不是很自然。

2)在用python脚本处理之后,粘贴到txt或者markdown文件中后,刚刚复制的文本已经变成去除换行的文本,所以预期的输出为:
在这里插入图片描述

这样就更加自然了(去除了僵硬了换行符)。

在此附上源码及EXE(感觉这个EXE是可以在windows系统上通用的,因为exe里面应该自带了很多依赖):我的CSDN资源页

1. 编写代码

1.1 说明

中间参考了很多网站,天色已晚然而要写的细节又太多,所以权衡之下,这里列出这些文献,不一一赘述。
参考:
[3] 用python模块pyperclip对系统剪贴板进行读写
[4] 有关正则表达式将多余空格转为一个空格的操作)
[5] 有关python捕获KeyboardInterrupt的方法
[6] 有关去掉行尾换行符的方法
[7] 有关去掉换行符的方法
[8] 有关python读写剪贴板的操作
[9] 有关读取剪切板内容的操作

其中主要参考:[3]和[4]。

1.2 具体代码

具体代码如下:

import time
import sys
import os
import re
sys.path.append(os.path.abspath("SO_site-packages"))
import pyperclip  # 引入模块

recent_value = ""
tmp_value="" # 初始化(应该也可以没有这一行,感觉意义不大。但是对recent_value的初始化是必须的)

while True:
    tmp_value = pyperclip.paste() 			# 读取剪切板复制的内容
    
    try:
        if tmp_value != recent_value:				 #如果检测到剪切板内容有改动,那么就进入文本的修改
            recent_value = tmp_value
            changed = out = re.sub(r"\s{2,}", " ", recent_value) 	#将文本的换行符去掉,变成一个空格
            pyperclip.copy(changed) 							#将修改后的文本写入系统剪切板中
            print("\n Value changed: %s" % str(changed))  	# 输出已经去除换行符的文本
        time.sleep(0.1)
    except KeyboardInterrupt:  # 如果有ctrl+c,那么就退出这个程序。  (不过好像并没有用。无伤大雅)
        break
        
    if tmp_value == 'getend': # 如果复制的是getend,就退出程序。(这个主要是为了方便我在spyder中运行、退出的时候用的。)
        break

2. 安装pyperclip

有了前面一段代码,还必须安装pyperclip:
直接在anaconda prompt中输入:
conda install pyperclip
即可安装。

3. 将python文件打包成exe文件(双击即可执行,非常方便)

3.1 安装pyinstaller

这时候需要安装pyinstaller模块。

先参考: python脚本打包成exe https://jingyan.baidu.com/article/39810a2346e926b637fda65f.html
在anaconda prompt中输入:
pip install pyinstaller

然后等就是了,它会自动下载一些依赖。

下载完之后,输入pyinstaller -h,如果显示出相关帮助信息,那么说明安装成功了。

3.2 打包成exe

这时候继续在anaconda prompt中运行:
pyinstaller -F 11-17.py (注意:这个11-17.py就是我的源代码对应的文件,放在桌面上了。)
在这里插入图片描述

一开始会报错,报错信息:

Exception:
            Cannot find existing PyQt5 plugin directories
            Paths checked: C:/Miniconda3/conda-bld/qt_1535195524645/_h_env/Library/plugins

这时候参考:[10]
即:
1) 建立一个这样的文件夹 C:/Miniconda3/conda-bld/qt_1535195524645/_h_env/Library/plugins
2) 将anaconda安装路径下的Library/plugins/PyQts5 中的dll文件拷贝到刚刚新建的文件夹下,如下:
在这里插入图片描述
3) 重新在prompt中输入:
pyinstaller -F 11-17.py
即可。

补充: [11]

使用

cd C:/
md Miniconda3/conda-bld/qt_1535195524645/_h_env/Library/plugins

来一次建立多级目录。(其实这个搜索挺难搜的,很难找到合适的搜索关键字。我当时用的关键字是:windows cmd 递归新建文件夹 。。。所以定关键字也是挑战。)

4) 此时根据prompt中输出信息的提示:22389 INFO: Appending archive to EXE C:\Users\dehen\Desktop\dist\11-17.exe
在桌面的dist文件夹中找到了11-17.exe。
双击运行,即可顺利完成我的功能。
在这里插入图片描述

感觉挺萌的一个exe图标。。。

5) 如果想退出,可以crtl+c 或者 直接右上角关掉窗口就好。关掉之后也就不占用系统资源了。
平时想用的时候直接打开,非常方便。

4. 其他信息

在此过程中还进行了一些其他尝试,不忍删除,所以也记录下来了。

4.1 下载pyhook

在anconda prompt和navigator下都没有找到pyhook。

在prompt下尝试的时候,报错:

Solving environment: failed

PackagesNotFoundError: The following packages are not available from current channels:

  - pyhook

Current channels:

  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/win-64
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch
  - https://repo.anaconda.com/pkgs/main/win-64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/free/win-64
  - https://repo.anaconda.com/pkgs/free/noarch
  - https://repo.anaconda.com/pkgs/r/win-64
  - https://repo.anaconda.com/pkgs/r/noarch
  - https://repo.anaconda.com/pkgs/pro/win-64
  - https://repo.anaconda.com/pkgs/pro/noarch
  - https://repo.anaconda.com/pkgs/msys2/win-64
  - https://repo.anaconda.com/pkgs/msys2/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page

表示一脸懵逼。

然后参考了[1],里面还有很多很有意思的conda指令:

conda config --add channels new_channel #优先级最高
conda config --prepend channels new_channel #优先级平等(equivalent)
conda config --append channels new_channel #优先级最低`

[2] 给出了pyhook的下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/

在这里下,然后再(在anaconda prompt中)pip install,应该是不会有问题的。(注意选对版本就行)

5. 总结

时间真的太快,还是要珍惜时间。

此外,应该多琢磨一下搜索技巧(如关键字的确定 等),这样才能高效找到答案。

此外,还要进一步学好英语,才能方便阅读英文网页。。。

不学了,休息…

参考文献

[1] Managing channels. https://conda.io/docs/user-guide/tasks/manage-channels.html

[2] How to install pyHook module? https://www.daniweb.com/programming/software-development/threads/452547/how-to-install-pyhook-module

[3] Trigger an event when clipboard content changes. https://stackoverflow.com/questions/14685999/trigger-an-event-when-clipboard-content-changes

[4] 请问如何用python replace字符串中间多余的空格转换为一个空格. https://segmentfault.com/q/1010000007856745?_ea=1474281

[5] python捕获ctrl+c手工中断程序的两种方法. https://blog.csdn.net/hqzxsc2006/article/details/73521680

[6] python去掉行尾的换行符方法. https://www.jb51.net/article/101973.htm

[7] python去除空格和换行符的方法. https://www.cnblogs.com/mxh1099/p/5680001.html

[8] python3 使用pyperclip读写剪贴板(windows). https://www.jianshu.com/p/0751933b6720

[9] python写入并获取剪切板内容. https://blog.csdn.net/qq_35885203/article/details/70154294

[10] python打包exe,各种入坑 https://www.e-learn.cn/content/python/1209009

[11] 中间新建文件夹我参考了:怎样使用md命令一次建立多级子目录 https://jingyan.baidu.com/album/37bce2be30cae21002f3a224.html?picindex=1

  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值