使用 Python 实现复制粘贴的功能

pandas 里面有一个 pd.read_clipboard 函数,可以根据你复制的内容生成DataFrame。是的,就是我们平时选中,然后 Ctrl+C 时拷贝的内容。所以比较神奇,那么 pandas 到底是怎么做到的,它是怎么读出我们使用 Ctrl +C 复制的内容呢。

看了一下源码,不同的操作系统使用的复制方式不同,Windows 比较复杂,方法是使用了ctypes,然后调用了操作系统的一个动态库实现的;而 macOS 和 Linux 比较简单,调用的是内置的命令。

下面我们来看看如何在这三个系统上实现复制粘贴的功能。

Windows 上的复制粘贴

图片

我们说 Windows 是使用 ctypes 调用动态库实现的,比较麻烦。但是我们知道 Python 有一个 pywin32 模块,对于 Windows 操作系统提供的接口进行了封装。所以在 Windows 上我们会使用 pywin32 来实现复制粘贴功能。

该模块直接通过 pip install pywin32 安装即可。

import win32clipboard as wcb
import win32con as wc# 打开复制粘贴板
wcb.OpenClipboard()
# 我们之前可能已经 Ctrl + C 了
# 这里是清空目前 Ctrl + C 复制的内容
# 但显然没有这一步也无所谓,因为第二次复制会覆盖第一次复制的内容
wcb.EmptyClipboard()
# 将内容写入复制粘贴板,第一个参数是 win32con.CF_TEXT
# 第二个参数是我们要复制的内容,编码的时候指定为 "gbk"
wcb.SetClipboardData(wc.CF_TEXT, "古明地觉".encode("gbk"))
# 关闭复制粘贴板
wcb.CloseClipboard()

然后我们 Ctrl+V 粘贴就会得到 “古明地觉” 这个字符串,另外编码的时候要使用 gbk,因为我当前操作系统默认编码使用的是 gbk,所以会对我们输入的字节使用 gbk 解码。因此如果使用 utf-8 编码的话,那么粘贴之后得到的就会是乱码。当然具体编码根据你当前的机器决定。

复制我们实现了,下面来看看怎么实现粘贴。

import win32clipboard as wcb
import win32con as wcwcb.OpenClipboard()
# 获取粘贴板内容,既然是获取,那么只需要一个参数即可
# 会返回已经使用 Ctrl + C 复制的内容
data = wcb.GetClipboardData(wc.CF_TEXT)
# 关闭复制粘贴板
wcb.CloseClipboard()# 然后随便 Ctrl+C 拷贝一段内容
# 下面就会将拷贝的内容打印出来
print(data.decode("gbk"))

还是很简单的,我们上面使用的模块是 win32 系列,所以它只适用于 Windows 系统。那如果我想在 Linux 和 macOS 中实现怎么办呢?也很简单,事实上,这两个系统实现起来反而会更简单,因为自带了相关的命令。

macOS 上的复制粘贴

图片

macOS 自带了相关命令,我们只需要通过 subprocess 模块去调用即可,举个例子:

图片

非常简单,那么代码要如何实现呢?

import subprocess# 实现拷贝
def copy(text):p = subprocess.Popen(["pbcopy", "w"],stdin=subprocess.PIPE,close_fds=True)# 将内容拷贝起来,注意 macOS 的编码默认是 utf-8p.communicate(input=text.encode("utf-8"))# 实现粘贴
def paste():p = subprocess.Popen(["pbpaste", "r"],stdout=subprocess.PIPE,close_fds=True)stdout, stderr = p.communicate()# 返回粘贴内容return stdout.decode("utf-8")copy("古明地觉的编程教室")
print(paste())  # 古明地觉的编程教室

以上代码在 macOS 上执行,由于自带了复制粘贴相关的命令,操作起来就比 Windows 方便多了。

Linux 上的复制粘贴

图片

Linux 也提供了复制粘贴的命令,叫 xclip,但这个命令不是自带的,我们需要使用 yum 安装。

import subprocess# 实现拷贝
def copy(text):p = subprocess.Popen(["xclip", "-selection", "c"], stdin=subprocess.PIPE, close_fds=True)p.communicate(input=text.encode("utf-8"))# 实现粘贴   
def paste():p = subprocess.Popen(["xclip", "-selection", "c", "-o"], stdout=subprocess.PIPE, close_fds=True)stdout, stderr = p.communicate()return stdout.decode("utf-8")  

但其实在 Linux 上通过命令实现复制粘贴没什么意义,因为我们都是通过 SSH 远程连接到公司的服务器,这种情况下 xclip 是不生效的。

在这里插入图片描述

当然,感觉这个功能也没多大用,当做兴趣了解一下就行。

pyperclip 实现复制粘贴

最后我们再来介绍一个模块,叫 pyperclip,它对不同的操作系统的复制粘贴功能进行了封装,可以简化我们的操作。举个例子:

import pyperclip# 复制
pyperclip.copy("哼哼")
# 粘贴
print(pyperclip.paste())  # 哼哼 

还是很方便的,以后就可以使用这个模块,自动帮我们屏蔽了操作系统间的差异。另外,这个模块只支持复制文本。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】s += 1 和 s = s + 1的区别

文章目录 1.问题2.发现过程3.解析 1.问题 以下两个程序真的完全等同吗? short s 0; s 1; short s 0; s s 1; 2.发现过程 初看s 1 和 s s 1好像是等价的,没有什么区别。很长一段时间内我也是这么觉得,因为当时学习c语言的时候教科书…

更优性能与性价比,从自建 ELK 迁移到 SLS 开始

作者:荆磊 背景 ELK (Elasticsearch、Logstash、Kibana) 是当下开源领域主流的日志解决方案,在可观测场景下有比较广泛的应用。 随着数字化进程加速,机器数据日志增加,自建 ELK 在面临大规模数据、查询性能等方面有较多问题和挑…

【简单讲解如何安装与配置Composer】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

实时渲染 -- 流明(Lumen)

首先我们需要知道Lumen需要解决哪些问题。 很多人都会问,既然已经有了硬件的Raytracing ,我们为什么还要Lumen呢。这是由于很多硬件并不支持 Realtime Raytracing,对于支持的那些硬件, N 卡还算是勉强可以,而 A 卡支持…

震动Github榜!7K Star火爆的数字人竟然开源了,拿走不谢(文末福利免费领)

本号专注于分享Github和Gitee上的高质量开源项目,并致力于推动前沿技术的分享。 软件介绍 Fay数字人框架-带货版是一个用于构建数字人应用场景的开源项目,具有低耦合度的各功能模块。你可以轻松更换声音来源、语音识别、情绪分析、NLP处理、情绪语音合成…

ES6-2:Iterator、Proxy、Promise、生成器函数...

11-Iterator迭代器 打印出的是里面的内容,如果是for in打印出来的是索引,of不能遍历对象Symbol.iterator是js内置的,可以访问直接对象arr[Symbol.iterator],()调用对象非线性一般不能迭代 后两个是伪数组,但是是真迭…

Android,AMS、WMS、PKMS添加动态控制debug开关功能

问题背景 在framework源码中有很多debug开关,通常我们想要看某个模块的日志,比如说广播,就需要去修改源码,把对应的debug值改为true,但是这种方法耗时耗力,比如说我想看sendBroadcast的流程,但是BroadcastQueue中有很多debug开关,如下: 这种就需要去修改对应的源码才…

腾讯客户端开发实习一面

听说腾讯25年5000offer,我就去了...投完简历,当天晚上做完测评,第二天下午打电话约了第三天面试,额流程很快,快到第三天就寄了... 写在这里做个记录,也可以给学习学妹们经验,文末也有大厂面经合…

ssm050助学贷款+jsp

助学贷款管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本助学贷款管理系统就是在这样的大环境下诞生,其可以帮助管理者在短…

Python学习笔记14 - 集合

什么是集合 集合的创建方式 集合的相关操作 集合间的关系 集合的数学操作 集合生成式 列表、字典、元组、集合总结

代码随想录算法训练营三刷day55 | 动态规划之子序列 392.判断子序列 115.不同的子序列

day55 392.判断子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 115.不同的子序列1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历…

怎样关闭谷歌浏览器自动更新,亲测ok

步骤一 在服务中禁用Google更新 步骤二 Chrome更新是利用Update文件夹里的升级程序来升级的,需要要删除里面的文件,再让Chrome没法在Update文件夹里继续自动生成更新程序。所以还要清空Update文件夹并设置权限,让Chrome没有权限修改这个文件…

Confluence 插件有哪些值得推荐?分享14个

Confluence 是一个专业的团队协作工具,它提供了一系列引人注目的功能,但要充分发挥它们的潜力,有时需要依赖于插件的力量。在这篇文章中,我将基于自己在团队协同搭建过程中使用到的大量插件中,分享一些我个人认为比较好…

web APIs总结(2)

1. 页面滚动事件 很多网页需要检测用户把页面滚动到某个区域后做一些处理, 比如固定导航栏、返回顶部事件名:scroll监听某个元素的内部滚动直接给某个元素加即可 获取位置 scrollLeft和scrollTop (属性) (注&#xf…

文心一言 VS 讯飞星火 VS chatgpt (237)-- 算法导论17.3 3题

三、考虑一个包含 n 个元素的普通二叉最小堆数据结构,它支持 INSERT 和 EXTRACT-MIN 操作、最坏情况时间均为 O(lg n) 。给出一个势数 Φ ,使得 INSERT 操作的摊还代价为 O(lg n) ,而 EXTRACT-MIN 操作的摊还代价为 O(1) ,证明它是…

【电子通识】吸锡带/线的作用和替代方法

吸锡带简介 吸锡带(或称吸锡线、脱焊织物)是手工焊接的好助手,手焊或维修时吸锡带能够去除电路板上多余焊锡,减少了电子产品的返工和修理的时间,降低了烙铁对电路板造成过热损伤的危险,因此是一个既廉价又有效的物品。 市面上卖的最多的的吸锡带类型如下所示: 吸锡带的选型…

【Qt编译】ARM环境 Qt5.14.2-QtWebEngine库编译 (完整版)

ARM 编译Qt5.14.2源码 1.下载源码 下载Qt5.14.2源代码(可根据自己的需求下载不同版本) 下载网站:https://download.qt.io/new_archive/qt/5.14/5.14.2/single/ 2.相关依赖(如果需要的话) 先参考官方文档的需求进行安装: 官方…

LangChain实战:从原型到生产,动手打造 LLM 应用 书籍推荐!

今天给大家推荐一本大模型方面的书籍<LangChain实战&#xff1a;从原型到生产&#xff0c;动手打造 LLM 应用>&#xff0c;本书将介绍大语言模型的基础理论包括语言模型、分布式模型训练以及强化学习&#xff0c;并以Deepspeed-Chat框架为例介绍实现大语言模型和类ChatGP…

UE4_导入内容_FBX导入选项说明

虽然将FBX文件导入到虚幻引擎4是一个相对简单的过程&#xff0c;但是有相当多的选项可以调整导入的资产。本文档将介绍这些选项。 当你使用FBX管道通过 内容浏览器 导入内容时&#xff0c;将出现 FBX导入选项&#xff08;FBX Import Options&#xff09; 对话框。导入器将自动…

2024第十五届蓝桥杯 C/C++ B组 参赛经历分享(以及部分题解)

前言 emmmmmm&#xff0c;dp杯居然不考dp了&#xff0c;蓝桥一直没怎么出过的高精度居然也考了&#xff08;当时居然因为没太复习那块知识直接模拟混分了&#xff09;&#xff0c;题量也改了&#xff0c;总的来说反而简单了&#xff1f;。。。还好天津竞赛弱省&#xff0c;但愿…