利用python監聽剪貼簿內容,並修改。
前言
由於我在讀論文的時候常常需要複製論文片段,然後論文(pdf格式)中常常有多餘的換行符,所以貼上到txt或者markdown文字中都會很不美觀,我希望能利用python指令碼把換行符去掉,在此記錄過程。
預期要實現的功能:
1)複製一個pdf中的論文片段,沒處理之前是這樣:
無論是放到部落格中還是儲存到txt中,感覺閱讀起來都不是很自然。
2)在用python指令碼處理之後,貼上到txt或者markdown檔案中後,剛剛複製的文字已經變成去除換行的文字,所以預期的輸出為:
這樣就更加自然了(去除了僵硬了換行符)。
在此附上原始碼及EXE(感覺這個EXE是可以在windows系統上通用的,因為exe裡面應該自帶了很多依賴):
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模組。
然後等就是了,它會自動下載一些依賴。
下載完之後,輸入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 #優先順序最低`
在這裡下,然後再(在anaconda prompt中)pip install,應該是不會有問題的。(注意選對版本就行)
5. 總結
時間真的太快,還是要珍惜時間。
此外,應該多琢磨一下搜尋技巧(如關鍵字的確定 等),這樣才能高效找到答案。
此外,還要進一步學好英語,才能方便閱讀英文網頁。。。
不學了,休息…