如何使用 Python 从 Windows 剪贴板读取文本?

2025-01-08 08:50:00
admin
原创
92
摘要:问题描述:如何使用 python 从(Windows)剪贴板读取文本?解决方案 1:您可以使用名为win32clipboard的模块,它是pywin32的一部分。下面是一个首先设置剪贴板数据然后获取数据的示例:import win32clipboard # set clipboard data win32c...

问题描述:

如何使用 python 从(Windows)剪贴板读取文本?


解决方案 1:

您可以使用名为win32clipboard的模块,它是pywin32的一部分。

下面是一个首先设置剪贴板数据然后获取数据的示例:

import win32clipboard

# set clipboard data
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText('testing 123')
win32clipboard.CloseClipboard()

# get clipboard data
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
print data

文档中的一个重要提醒:

当窗口检查或更改完剪贴板后,通过调用 CloseClipboard 关闭剪贴板。这样其他窗口就可以访问剪贴板了。调用 CloseClipboard 后不要将对象放在剪贴板上。

解决方案 2:

您可以通过内置模块Tkinter轻松完成此操作,该模块基本上是一个 GUI 库。此代码创建一个空白小部件以从操作系统获取剪贴板内容。

from tkinter import Tk  # Python 3
#from Tkinter import Tk # for Python 2.x
Tk().clipboard_get()

解决方案 3:

我发现pyperclip是从 python 访问剪贴板的最简单方法:

  1. 安装 pyperclip:
    pip install pyperclip

  2. 用法:

import pyperclip
    
s = pyperclip.paste()
pyperclip.copy(s)
    
# the type of s is string

Pyperclip 支持 Windows、Linux 和 Mac,似乎也适用于非 ASCII 字符。已测试的字符包括 ±°©©αβγθΔΨΦåäö

解决方案 4:

如果你不想安装额外的软件包,ctypes也可以完成这项工作。

import ctypes

CF_TEXT = 1

kernel32 = ctypes.windll.kernel32
kernel32.GlobalLock.argtypes = [ctypes.c_void_p]
kernel32.GlobalLock.restype = ctypes.c_void_p
kernel32.GlobalUnlock.argtypes = [ctypes.c_void_p]
user32 = ctypes.windll.user32
user32.GetClipboardData.restype = ctypes.c_void_p

def get_clipboard_text():
    user32.OpenClipboard(0)
    try:
        if user32.IsClipboardFormatAvailable(CF_TEXT):
            data = user32.GetClipboardData(CF_TEXT)
            data_locked = kernel32.GlobalLock(data)
            text = ctypes.c_char_p(data_locked)
            value = text.value
            kernel32.GlobalUnlock(data_locked)
            return value
    finally:
        user32.CloseClipboard()

print(get_clipboard_text())

解决方案 5:

我见过很多使用 win32 模块的建议,但是 Tkinter 提供了我见过的最短、最简单的方法,如在这篇文章中:如何使用 Python 将字符串复制到 Windows 上的剪贴板?

另外,Tkinter 位于 Python 标准库中。

解决方案 6:

上面得票最多的答案很奇怪,因为它只是清除剪贴板,然后获取内容(然后内容为空)。可以清除剪贴板,以确保某些剪贴板内容类型(如“格式化文本”)不会“覆盖”您想要保存在剪贴板中的纯文本内容。

下面这段代码将剪贴板中的所有换行符替换为空格,然后删除所有双空格,最后将内容保存回剪贴板:

import win32clipboard

win32clipboard.OpenClipboard()
c = win32clipboard.GetClipboardData()
win32clipboard.EmptyClipboard()
c = c.replace('
', ' ')
c = c.replace('
', ' ')
while c.find('  ') != -1:
    c = c.replace('  ', ' ')
win32clipboard.SetClipboardText(c)
win32clipboard.CloseClipboard()

解决方案 7:

Python 标准库可以做到这一点......

try:
    # Python3
    import tkinter as tk
except ImportError:
    # Python2
    import Tkinter as tk

def getClipboardText():
    root = tk.Tk()
    # keep the window from showing
    root.withdraw()
    return root.clipboard_get()

解决方案 8:

对于我的控制台程序,上面使用 tkinter 的答案对我来说不太适用,因为 .destroy() 总是给出错误:

无法调用“事件”命令:应用程序在执行时已被破坏......

或者当使用 .withdraw() 时控制台窗口没有重新获得焦点。

为了解决这个问题,你还必须在 .destroy() 之前调用 .update()。例如:

# Python 3
import tkinter

r = tkinter.Tk()
text = r.clipboard_get()
r.withdraw()
r.update()
r.destroy()

r.withdraw() 会阻止帧显示一毫秒,然后它将被销毁并将焦点返回到控制台。

解决方案 9:

为什么不尝试调用 powershell?

import subprocess

def getClipboard():
    ret = subprocess.getoutput("powershell.exe -Command Get-Clipboard")
    return ret

解决方案 10:

使用 Python 的剪贴板库

它的用法很简单,如下:

import clipboard
clipboard.copy("this text is now in the clipboard")
print clipboard.paste()  

解决方案 11:

尝试使用 win32all 包中的 win32clipboard(如果您使用的是 ActiveState Python,则可能已安装)。

请参阅此处的示例:http: //code.activestate.com/recipes/474121/

解决方案 12:

import pandas as pd
df = pd.read_clipboard()

解决方案 13:

经过整整 12 年,我终于找到了解决方案,您无需安装任何软件包即可使用它。

from tkinter import Tk, TclError
from time import sleep

while True:
    try:
        clipboard = Tk().clipboard_get()
        print(clipboard)
        sleep(5)
    except TclError:
        print("Clipboard is empty.")
        sleep(5)

解决方案 14:

一个不太直接的技巧:

使用 pyautogui 热键:

Import pyautogui
pyautogui.hotkey('ctrl', 'v')

因此,您可以随意粘贴剪贴板数据。

解决方案 15:

对于 Anaconda 用户:发行版不附带 pyperclip,但它们附带重新分发 pyperclip 的 pandas:

>>> from pandas.io.clipboard import clipboard_get, clipboard_set
>>> clipboard_get()
'from pandas.io.clipboard import clipboard_get, clipboard_set'
>>> clipboard_set("Hello clipboard!")
>>> clipboard_get()
'Hello clipboard!'

我发现它比 pywin32(也包含在发行版中)更容易使用。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用