詳解如何使用Python實(shí)現(xiàn)復(fù)制粘貼的功能
楔子
pandas 里面有一個 pd.read_clipboard 函數(shù),可以根據(jù)你復(fù)制的內(nèi)容生成DataFrame。是的,就是我們平時選中,然后 Ctrl+C 時拷貝的內(nèi)容。所以比較神奇,那么 pandas 到底是怎么做到的,它是怎么讀出我們使用 Ctrl +C 復(fù)制的內(nèi)容呢。
看了一下源碼,不同的操作系統(tǒng)使用的復(fù)制方式不同,Windows 比較復(fù)雜,方法是使用了ctypes,然后調(diào)用了操作系統(tǒng)的一個動態(tài)庫實(shí)現(xiàn)的;而 macOS 和 Linux 比較簡單,調(diào)用的是內(nèi)置的命令。
下面我們來看看如何在這三個系統(tǒng)上實(shí)現(xiàn)復(fù)制粘貼的功能。
Windows 上的復(fù)制粘貼
我們說 Windows 是使用 ctypes 調(diào)用動態(tài)庫實(shí)現(xiàn)的,比較麻煩。但是我們知道 Python 有一個 pywin32 模塊,對于 Windows 操作系統(tǒng)提供的接口進(jìn)行了封裝。所以在 Windows 上我們會使用 pywin32 來實(shí)現(xiàn)復(fù)制粘貼功能。
該模塊直接通過 pip install pywin32 安裝即可。
import?win32clipboard?as?wcb import?win32con?as?wc #?打開復(fù)制粘貼板 wcb.OpenClipboard() #?我們之前可能已經(jīng)?Ctrl?+?C?了 #?這里是清空目前?Ctrl?+?C?復(fù)制的內(nèi)容 #?但顯然沒有這一步也無所謂,因?yàn)榈诙螐?fù)制會覆蓋第一次復(fù)制的內(nèi)容 wcb.EmptyClipboard() #?將內(nèi)容寫入復(fù)制粘貼板,第一個參數(shù)是?win32con.CF_TEXT #?第二個參數(shù)是我們要復(fù)制的內(nèi)容,編碼的時候指定為?"gbk" wcb.SetClipboardData(wc.CF_TEXT,?"古明地覺".encode("gbk")) #?關(guān)閉復(fù)制粘貼板 wcb.CloseClipboard()
然后我們 Ctrl+V 粘貼就會得到 "古明地覺" 這個字符串,另外編碼的時候要使用 gbk,因?yàn)槲耶?dāng)前操作系統(tǒng)默認(rèn)編碼使用的是 gbk,所以會對我們輸入的字節(jié)使用 gbk 解碼。因此如果使用 utf-8 編碼的話,那么粘貼之后得到的就會是亂碼。當(dāng)然具體編碼根據(jù)你當(dāng)前的機(jī)器決定。
復(fù)制我們實(shí)現(xiàn)了,下面來看看怎么實(shí)現(xiàn)粘貼。
import?win32clipboard?as?wcb import?win32con?as?wc wcb.OpenClipboard() #?獲取粘貼板內(nèi)容,既然是獲取,那么只需要一個參數(shù)即可 #?會返回已經(jīng)使用?Ctrl?+?C?復(fù)制的內(nèi)容 data?=?wcb.GetClipboardData(wc.CF_TEXT) #?關(guān)閉復(fù)制粘貼板 wcb.CloseClipboard() #?然后隨便?Ctrl+C?拷貝一段內(nèi)容 #?下面就會將拷貝的內(nèi)容打印出來 print(data.decode("gbk"))
還是很簡單的,我們上面使用的模塊是 win32 系列,所以它只適用于 Windows 系統(tǒng)。那如果我想在 Linux 和 macOS 中實(shí)現(xiàn)怎么辦呢?也很簡單,事實(shí)上,這兩個系統(tǒng)實(shí)現(xiàn)起來反而會更簡單,因?yàn)樽詭Я讼嚓P(guān)的命令。
macOS 上的復(fù)制粘貼
macOS 自帶了相關(guān)命令,我們只需要通過 subprocess 模塊去調(diào)用即可,舉個例子:
非常簡單,那么代碼要如何實(shí)現(xiàn)呢?
import?subprocess #?實(shí)現(xiàn)拷貝 def?copy(text): ????p?=?subprocess.Popen(["pbcopy",?"w"], ?????????????????????????stdin=subprocess.PIPE, ?????????????????????????close_fds=True) ????#?將內(nèi)容拷貝起來,注意?macOS?的編碼默認(rèn)是?utf-8 ????p.communicate(input=text.encode("utf-8")) #?實(shí)現(xiàn)粘貼 def?paste(): ????p?=?subprocess.Popen(["pbpaste",?"r"], ?????????????????????????stdout=subprocess.PIPE, ?????????????????????????close_fds=True) ????stdout,?stderr?=?p.communicate() ????#?返回粘貼內(nèi)容 ????return?stdout.decode("utf-8") copy("古明地覺的編程教室") print(paste())??#?古明地覺的編程教室
以上代碼在 macOS 上執(zhí)行,由于自帶了復(fù)制粘貼相關(guān)的命令,操作起來就比 Windows 方便多了。
Linux 上的復(fù)制粘貼
Linux 也提供了復(fù)制粘貼的命令,叫 xclip,但這個命令不是自帶的,我們需要使用 yum 安裝。
import?subprocess #?實(shí)現(xiàn)拷貝 def?copy(text): ????p?=?subprocess.Popen( ????????["xclip",?"-selection",?"c"],? ????????stdin=subprocess.PIPE,?close_fds=True ????) ????p.communicate(input=text.encode("utf-8")) #?實(shí)現(xiàn)粘貼??? def?paste(): ????p?=?subprocess.Popen( ????????["xclip",?"-selection",?"c",?"-o"],? ????????stdout=subprocess.PIPE,?close_fds=True ????) ????stdout,?stderr?=?p.communicate() ????return?stdout.decode("utf-8")??
但其實(shí)在 Linux 上通過命令實(shí)現(xiàn)復(fù)制粘貼沒什么意義,因?yàn)槲覀兌际峭ㄟ^ SSH 遠(yuǎn)程連接到公司的服務(wù)器,這種情況下 xclip 是不生效的。
當(dāng)然,感覺這個功能也沒多大用,當(dāng)做興趣了解一下就行。
pyperclip 實(shí)現(xiàn)復(fù)制粘貼
最后我們再來介紹一個模塊,叫 pyperclip,它對不同的操作系統(tǒng)的復(fù)制粘貼功能進(jìn)行了封裝,可以簡化我們的操作。舉個例子:
import?pyperclip #?復(fù)制 pyperclip.copy("哼哼") #?粘貼 print(pyperclip.paste())??#?哼哼?
還是很方便的,以后就可以使用這個模塊,自動幫我們屏蔽了操作系統(tǒng)間的差異。另外,這個模塊只支持復(fù)制文本。
到此這篇關(guān)于詳解如何使用Python實(shí)現(xiàn)復(fù)制粘貼的功能的文章就介紹到這了,更多相關(guān)Python復(fù)制粘貼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python?Fuzzywuzzy庫基本函數(shù)及模糊字符串匹配應(yīng)用實(shí)戰(zhàn)
fuzzywuzzy?是一個用于模糊字符串匹配的?Python?庫,它基于編輯距離算法,提供了多個函數(shù)來比較字符串之間的相似性,在實(shí)際開發(fā)中,字符串匹配是一項(xiàng)常見但具有挑戰(zhàn)性的任務(wù),用戶可能犯拼寫錯誤,使用縮寫或者輸入同義詞,因此,我們需要一種方法來處理這些情況2023-12-12Python讀取xlsx文件的實(shí)現(xiàn)方法
這篇文章主要介紹了Python讀取xlsx文件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件全過程
pyinstaller是一個支持跨平臺使用的第三方庫,它可以將腳本執(zhí)行所需的模塊和庫,自動分析、收集并生成一個文件夾或者可執(zhí)行文件,這篇文章主要給大家介紹了關(guān)于conda虛擬環(huán)境下使用pyinstaller打包程序?yàn)閑xe文件的相關(guān)資料,需要的朋友可以參考下2023-12-12python使用beautifulsoup4爬取酷狗音樂代碼實(shí)例
這篇文章主要介紹了python使用beautifulsoup4爬取酷狗音樂代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12Python3隨機(jī)漫步生成數(shù)據(jù)并繪制
這篇文章主要為大家詳細(xì)介紹了Python3隨機(jī)漫步生成數(shù)據(jù)并繪制的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08