Python 操作Office的PPT、Word、Excel,同时兼容WPS

文章目录

    • 概要
    • 一、环境准备
      • 1. 安装必要的Python库
      • 2. 系统要求
    • 二、核心实现原理
      • 1. 检测已安装的Office类型
      • 2. 初始化对应的应用程序
    • 三、完整代码实现
    • 四、使用示例
    • 五、WPS兼容处理详解
      • 1. 形状和文本框访问兼容处理
      • 2. PPT图片粘贴兼容处理
      • 3. 资源释放的重要性
    • 六、图片操作实现详解
      • 1. 直接插入图片
      • 2. 通过剪贴板复制粘贴图片
    • 七、注意事项
    • 八、总结

概要

在日常办公自动化中,我们经常需要使用Python来操作Microsoft Office的Excel、Word和PowerPoint文件。然而,在国内环境下,WPS Office也被广泛使用。本文将介绍如何编写同时兼容两种办公软件的Python代码,实现无缝的自动化办公体验。

一、环境准备

1. 安装必要的Python库

我们需要使用pywin32库来通过COM接口操作Office和WPS,以及pillow库来处理图片:

pip install pywin32 pillow

如果需要处理数据,还可以安装pandas库:

pip install pandas

2. 系统要求

  • Windows操作系统(因为COM接口是Windows特有的)
  • 已安装Microsoft Office或WPS Office

二、核心实现原理

1. 检测已安装的Office类型

首先,我们需要检测系统中安装的是Microsoft Office还是WPS Office。这可以通过读取Windows注册表来实现:

import winregdef detect_office_type():try:# 检查Microsoft Officewinreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Office")return "Microsoft Office"except WindowsError:try:# 检查WPS Officewinreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Kingsoft\Office")return "WPS Office"except WindowsError:return None

2. 初始化对应的应用程序

根据检测到的Office类型,我们需要初始化对应的应用程序。Microsoft Office和WPS Office的COM接口名称不同:

  • Microsoft Office的COM接口:Excel.Application, Word.Application, PowerPoint.Application
  • WPS Office的COM接口:Ket.Application, Kwps.Application, Kwpp.Application
from win32com.client import Dispatchdef initialize_applications(office_type):if office_type == "Microsoft Office":excel = Dispatch("Excel.Application")word = Dispatch("Word.Application")powerpoint = Dispatch("PowerPoint.Application")elif office_type == "WPS Office":excel = Dispatch("Ket.Application")word = Dispatch("Kwps.Application")powerpoint = Dispatch("Kwpp.Application")else:return None, None, None# 设置应用程序可见性和警告选项excel.Visible = Trueexcel.DisplayAlerts = Falseword.Visible = Trueword.DisplayAlerts = Falsepowerpoint.Visible = Truepowerpoint.DisplayAlerts = Falsereturn excel, word, powerpoint

三、完整代码实现

下面是一个完整的示例,演示如何创建一个兼容Office和WPS的处理器类,实现Excel、Word和PPT的基本操作,包括图片插入功能:

import os
import sys
import time
import winreg
import tempfile
from PIL import Image, ImageDraw, ImageFont
from win32com.client import Dispatchclass OfficeWPSHandler:"""Office和WPS兼容处理器"""def __init__(self):self.office_type = Noneself.excel = Noneself.word = Noneself.powerpoint = Noneself.output_dir = os.path.join(os.getcwd(), 'output', 'Office_WPS演示')os.makedirs(self.output_dir, exist_ok=True)def detect_office_type(self):"""检测系统安装的Office类型"""try:# 检查Microsoft Officewinreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Office")self.office_type = "Microsoft Office"except WindowsError:try:# 检查WPS Officewinreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Kingsoft\Office")self.office_type = "WPS Office"except WindowsError:self.office_type = Nonereturn self.office_typedef initialize_applications(self):"""初始化Office/WPS应用程序"""if self.office_type == "Microsoft Office":self.excel = Dispatch("Excel.Application")self.word = Dispatch("Word.Application")self.powerpoint = Dispatch("PowerPoint.Application")elif self.office_type == "WPS Office":self.excel = Dispatch("Ket.Application")self.word = Dispatch("Kwps.Application")self.powerpoint = Dispatch("Kwpp.Application")else:print("未检测到Microsoft Office或WPS Office!")return False# 设置应用程序可见性和警告选项self.excel.Visible = True  # 设置为True便于调试self.excel.DisplayAlerts = Falseself.word.Visible = Trueself.word.DisplayAlerts = Falseself.powerpoint.Visible = True  # 涉及图形操作时必须设置为可见self.powerpoint.DisplayAlerts = Falseprint(f"成功初始化 {self.office_type} 应用程序")return Truedef create_excel_demo(self):"""创建Excel演示文件"""try:# 创建工作簿workbook = self.excel.Workbooks.Add()worksheet = workbook.Worksheets(1)worksheet.Name = "演示数据"# 写入数据worksheet.Cells(1, 1).Value = "姓名"worksheet.Cells(1, 2).Value = "年龄"worksheet.Cells(1, 3).Value = "职位"worksheet.Cells(2, 1).Value = "张三"worksheet.Cells(2, 2).Value = 30worksheet.Cells(2, 3).Value = "工程师"worksheet.Cells(3, 1).Value = "李四"worksheet.Cells(3, 2).Value = 35worksheet.Cells(3, 3).Value = "经理"# 调整列宽worksheet.Columns("A:C").AutoFit()# 保存文件excel_file = os.path.join(self.output_dir, f"{self.office_type}_Excel演示.xlsx")workbook.SaveAs(excel_file)workbook.Close()print(f"Excel演示文件已保存至:{excel_file}")return Trueexcept Exception as e:print(f"创建Excel文件时出错:{e}")return Falsedef set_word_text(self, shapes, shape_index, shape_text):"""Word:查找并设置文本框内容的函数(兼容Microsoft Office和WPS Office)"""try:if not isinstance(shape_index, int):  # 如果shape_index是Nameshapes.Item(shape_index).TextFrame.TextRange.Text = shape_textelse:  # 如果shape_index是indexshapes[shape_index].TextFrame.TextRange.Text = shape_textreturn Trueexcept Exception as e:print(f"设置Word文本时出错:{e}")return Falsedef create_word_demo(self):"""创建Word演示文件"""try:# 创建文档doc = self.word.Documents.Add()# 添加标题title_range = doc.Range(0, 0)title_range.Text = "Python操作Word演示文档\n"title_range.Font.Size = 18title_range.Font.Bold = Truetitle_range.ParagraphFormat.Alignment = 1  # 居中对齐# 添加正文content_range = doc.Range()content_range.Text = "这是一个使用Python和win32com库操作Word的演示文档。\n"content_range.Font.Size = 12content_range.ParagraphFormat.Alignment = 0  # 左对齐# 添加列表list_range = doc.Range()list_range.Text = "\n支持的功能:\n"list_range.Font.Size = 12list_items = ["创建新文档", "设置文本格式", "添加表格", "插入图片", "保存文档"]for item in list_items:item_range = doc.Range()item_range.Text = f"• {item}\n"item_range.Font.Size = 12# 演示Word文本框设置(兼容处理)# 添加一个文本框text_box = doc.Shapes.AddTextbox(1, 100, 300, 400, 50)text_box.Name = "demo_textbox"# 使用兼容函数设置文本self.set_word_text(doc.Shapes, "demo_textbox", "这是通过兼容函数设置的文本内容")# 保存文件word_file = os.path.join(self.output_dir, f"{self.office_type}_Word演示.docx")doc.SaveAs(word_file)doc.Close()print(f"Word演示文件已保存至:{word_file}")return Trueexcept Exception as e:print(f"创建Word文件时出错:{e}")return Falsedef get_ppt_shape(self, slide, shape_index):"""查找并返回指定幻灯片上的形状的函数(兼容Microsoft Office和WPS Office)"""try:if not isinstance(shape_index, int):  # 如果shape_index是Namereturn slide.Shapes.Item(shape_index)else:  # 如果shape_index是indexreturn slide.Shapes[shape_index]except Exception as e:print(f"获取PPT形状时出错:{e}")return Nonedef set_ppt_text(self, slide, shape_index, shape_text):"""PPT查找并设置文本框内容的函数(兼容Microsoft Office和WPS Office)"""try:if not isinstance(shape_index, int):  # 如果shape_index是Nameslide.Shapes.Item(shape_index).TextFrame.TextRange.Text = shape_textelse:  # 如果shape_index是indexslide.Shapes[shape_index].TextFrame.TextRange.Text = shape_textreturn Trueexcept Exception as e:print(f"设置PPT文本时出错:{e}")return Falsedef create_ppt_demo(self):"""创建PPT演示文件"""try:# 创建演示文稿presentation = self.powerpoint.Presentations.Add()# 添加标题幻灯片slide1 = presentation.Slides.Add(1, 12)  # 12代表标题幻灯片布局slide1.Shapes.Title.TextFrame.TextRange.Text = "Python操作PPT演示"slide1.Shapes(2).TextFrame.TextRange.Text = "兼容Microsoft Office和WPS Office"# 添加内容幻灯片slide2 = presentation.Slides.Add(2, 2)  # 2代表标题和内容布局slide2.Shapes.Title.TextFrame.TextRange.Text = "支持的功能"# 添加文本框和列表text_box = slide2.Shapes.AddTextbox(1, 50, 100, 600, 300)text_box.Name = "demo_textbox"# 使用兼容函数设置文本items = ["创建演示文稿", "添加幻灯片", "设置文本格式", "插入图表", "保存演示文稿"]text = "\n".join([f"• {item}" for item in items])self.set_ppt_text(slide2, "demo_textbox", text)# 获取并设置字体大小(兼容处理)shape = self.get_ppt_shape(slide2, "demo_textbox")if shape:shape.TextFrame.TextRange.Font.Size = 16# 保存文件ppt_file = os.path.join(self.output_dir, f"{self.office_type}_PPT演示.pptx")presentation.SaveAs(ppt_file)presentation.Close()print(f"PPT演示文件已保存至:{ppt_file}")return Trueexcept Exception as e:print(f"创建PPT文件时出错:{e}")return Falsedef create_sample_image(self):"""创建示例图片用于演示"""try:# 创建一个简单的图片image = Image.new('RGB', (400, 300), color='white')draw = ImageDraw.Draw(image)# 尝试加载系统字体,如果失败则使用默认字体try:font = ImageFont.truetype("arial.ttf", 36)except:font = ImageFont.load_default()# 在图片上绘制文本draw.text((50, 100), "Python Office/WPS演示", fill=(0, 0, 255), font=font)draw.text((100, 160), "图片示例", fill=(0, 128, 0), font=font)# 绘制一些简单的图形draw.rectangle([(50, 50), (350, 250)], outline=(0, 0, 0), width=2)draw.ellipse([(150, 200), (250, 250)], fill=(255, 255, 0), outline=(0, 0, 0))# 保存图片image_path = os.path.join(self.output_dir, "sample_image.png")image.save(image_path)print(f"示例图片已创建:{image_path}")return image_pathexcept Exception as e:print(f"创建示例图片时出错:{e}")return Nonedef add_image_to_ppt(self):"""将图片复制并粘贴到PPT演示文稿中"""try:# 确保示例图片存在image_path = self.create_sample_image()if not image_path or not os.path.exists(image_path):print("示例图片不存在,无法添加到PPT")return False# 创建演示文稿presentation = self.powerpoint.Presentations.Add()# 添加标题幻灯片slide1 = presentation.Slides.Add(1, 12)slide1.Shapes.Title.TextFrame.TextRange.Text = "图片插入演示"slide1.Shapes(2).TextFrame.TextRange.Text = "演示如何将图片添加到PPT中"# 添加图片幻灯片slide2 = presentation.Slides.Add(2, 11)  # 11代表空白幻灯片布局slide2.Shapes.Title.TextFrame.TextRange.Text = "图片展示"# 方法1:直接插入图片(更简单)slide2.Shapes.AddPicture(FileName=image_path, LinkToFile=False, SaveWithDocument=True, Left=100, Top=100, Width=400, Height=300)# 添加说明文字(使用兼容函数)text_box = slide2.Shapes.AddTextbox(1, 100, 420, 400, 50)text_box.Name = "method1_text"self.set_ppt_text(slide2, "method1_text", "方法1:直接插入图片到PPT")# 获取并设置字体大小(兼容处理)shape = self.get_ppt_shape(slide2, "method1_text")if shape:shape.TextFrame.TextRange.Font.Size = 14# 添加第三张幻灯片,演示复制粘贴方式slide3 = presentation.Slides.Add(3, 11)slide3.Shapes.Title.TextFrame.TextRange.Text = "复制粘贴图片演示"# 方法2:通过剪贴板复制粘贴图片# 注意:此方法在WPS中需要特别的兼容处理import win32clipboardfrom PIL import Image# 打开图片并复制到剪贴板image = Image.open(image_path)output = tempfile.SpooledTemporaryFile(max_size=1024*1024)image.convert("RGB").save(output, "BMP")data = output.getvalue()[14:]  # 去掉BMP文件头output.close()# 将图片数据写入剪贴板win32clipboard.OpenClipboard()win32clipboard.EmptyClipboard()win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)win32clipboard.CloseClipboard()# 在PPT中粘贴图片slide3.Select()  # 激活幻灯片(兼容WPS Office)shape_picture = slide3.Shapes.Paste()  # 粘贴图片# 兼容处理:在WPS中,Paste()可能返回Noneif shape_picture is None:shape_count = slide3.Shapes.Countif shape_count > 0:shape_picture = slide3.Shapes.Item(shape_count)# 设置图片位置和大小(如果成功获取到图片对象)if shape_picture:shape_picture.Top = 100shape_picture.Left = 100shape_picture.Width = 400shape_picture.Height = 300# 添加说明文字(使用兼容函数)text_box2 = slide3.Shapes.AddTextbox(1, 100, 420, 400, 50)text_box2.Name = "method2_text"self.set_ppt_text(slide3, "method2_text", "方法2:通过剪贴板复制粘贴图片")# 获取并设置字体大小(兼容处理)shape = self.get_ppt_shape(slide3, "method2_text")if shape:shape.TextFrame.TextRange.Font.Size = 14# 保存文件ppt_file = os.path.join(self.output_dir, f"{self.office_type}_PPT图片演示.pptx")presentation.SaveAs(ppt_file)presentation.Close()print(f"包含图片的PPT文件已保存至:{ppt_file}")return Trueexcept Exception as e:print(f"向PPT添加图片时出错:{e}")return Falsedef close_applications(self):"""关闭所有应用程序并释放COM对象"""try:if self.excel:self.excel.Quit()del self.excel  # 释放COM对象if self.word:self.word.Quit()del self.word  # 释放COM对象if self.powerpoint:self.powerpoint.Quit()del self.powerpoint  # 释放COM对象print("所有应用程序已关闭并释放资源")except Exception as e:print(f"关闭应用程序时出错:{e}")

四、使用示例

下面是如何使用上面的处理器类来操作Office或WPS文件的完整示例:

if __name__ == "__main__":print("Python操作Office与WPS兼容演示程序")print("==================================")# 创建处理器实例handler = OfficeWPSHandler()# 检测Office类型print("正在检测系统安装的Office类型...")office_type = handler.detect_office_type()if office_type:print(f"检测到:{office_type}")# 初始化应用程序if handler.initialize_applications():# 演示Excel操作print("\n开始创建Excel演示文件...")handler.create_excel_demo()# 演示Word操作print("\n开始创建Word演示文件...")handler.create_word_demo()# 演示PPT操作print("\n开始创建PPT演示文件...")handler.create_ppt_demo()# 演示PPT图片插入操作print("\n开始创建包含图片的PPT演示文件...")handler.add_image_to_ppt()else:print("未检测到Microsoft Office或WPS Office,程序无法运行。")# 关闭所有应用程序print("\n正在关闭所有应用程序...")handler.close_applications()print("\n演示完成!")input("按任意键退出...")sys.exit()

五、WPS兼容处理详解

在实现Office和WPS兼容时,有一些关键的处理点需要特别注意。下面我们详细介绍这些兼容处理方法:

1. 形状和文本框访问兼容处理

Microsoft Office和WPS Office在访问形状和文本框时存在细微差异。为了解决这个问题,我们实现了几个通用函数:

def set_word_text(self, shapes, shape_index, shape_text):"""Word:查找并设置文本框内容的函数(兼容Microsoft Office和WPS Office)"""try:if not isinstance(shape_index, int):  # 如果shape_index是Nameshapes.Item(shape_index).TextFrame.TextRange.Text = shape_textelse:  # 如果shape_index是indexshapes[shape_index].TextFrame.TextRange.Text = shape_textreturn Trueexcept Exception as e:print(f"设置Word文本时出错:{e}")return False# 类似的函数还有:
# get_ppt_shape - 获取PPT形状的兼容函数
# set_ppt_text - 设置PPT文本框的兼容函数

这些函数通过检查参数类型,判断是使用索引还是名称来访问形状,从而实现对两种办公软件的兼容。

2. PPT图片粘贴兼容处理

在WPS中粘贴图片是一个需要特别处理的操作。主要有以下几个要点:

  1. 幻灯片激活:在粘贴图片之前,需要先激活目标幻灯片

  2. 粘贴返回值处理:在WPS中,Paste()方法可能返回None,需要通过其他方式获取粘贴的图片

  3. 图片定位和尺寸设置:需要确保图片正确放置在幻灯片上

# 粘贴图片的兼容处理示例
slide3.Select()  # 激活幻灯片(兼容WPS Office)
shape_picture = slide3.Shapes.Paste()  # 粘贴图片# 兼容处理:在WPS中,Paste()可能返回None
if shape_picture is None:shape_count = slide3.Shapes.Countif shape_count > 0:shape_picture = slide3.Shapes.Item(shape_count)# 设置图片位置和大小(如果成功获取到图片对象)
if shape_picture:shape_picture.Top = 100shape_picture.Left = 100shape_picture.Width = 400shape_picture.Height = 300

3. 资源释放的重要性

在操作完成后,正确释放COM对象非常重要,特别是在长时间运行的自动化脚本中:

def close_applications(self):"""关闭所有应用程序并释放COM对象"""try:if self.excel:self.excel.Quit()del self.excel  # 释放COM对象if self.word:self.word.Quit()del self.word  # 释放COM对象if self.powerpoint:self.powerpoint.Quit()del self.powerpoint  # 释放COM对象print("所有应用程序已关闭并释放资源")except Exception as e:print(f"关闭应用程序时出错:{e}")

使用del语句明确释放COM对象,可以避免资源泄漏和进程残留问题。

六、图片操作实现详解

在办公自动化中,图片处理是常见需求。我们的代码提供了两种将图片添加到PPT的方法:

1. 直接插入图片

这种方法简单直接,适合大多数场景:

# 方法1:直接插入图片(更简单)
slide2.Shapes.AddPicture(FileName=image_path, LinkToFile=False, SaveWithDocument=True, Left=100, Top=100, Width=400, Height=300)

这种方法在Microsoft Office和WPS Office中都能很好地工作,不需要特别的兼容处理。

2. 通过剪贴板复制粘贴图片

这种方法更灵活,特别是在需要对图片进行预处理或从其他来源获取图片时:

import win32clipboard
from PIL import Image# 打开图片并复制到剪贴板
image = Image.open(image_path)
output = tempfile.SpooledTemporaryFile(max_size=1024*1024)
image.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]  # 去掉BMP文件头
output.close()# 将图片数据写入剪贴板
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()# 在PPT中粘贴图片(需要WPS兼容处理)
slide3.Select()
shape_picture = slide3.Shapes.Paste()# WPS兼容处理逻辑...

这种方法在WPS中需要特别注意幻灯片激活和粘贴返回值的处理。

七、注意事项

  1. 应用程序可见性设置:在处理图形或需要界面交互的操作时,建议将应用程序设置为可见(Visible = True),特别是在操作PowerPoint时。

  2. 资源释放:使用完毕后,一定要调用Quit()方法关闭应用程序并释放COM对象,避免资源泄漏。

  3. 文件格式兼容性:Microsoft Office和WPS Office的文件格式虽然高度兼容,但在某些高级功能上仍可能存在差异。

  4. 运行权限:某些操作可能需要管理员权限才能执行,特别是在修改系统注册表相关的功能时。

  5. 错误处理:在实际应用中,应该添加完善的错误处理机制,以应对可能出现的各种异常情况。

  6. 环境准备:确保已安装所有必要的库,特别是在使用图片处理功能时,需要安装pillow库。

八、总结

通过本文介绍的方法,我们可以编写同时兼容Microsoft Office和WPS Office的Python代码,实现Excel、Word和PowerPoint文件的自动化操作。特别是通过添加set_word_textget_ppt_shapeset_ppt_text等兼容函数,以及特别处理PPT图片粘贴等操作,我们可以确保代码在不同的办公环境中都能稳定工作。

这种兼容方案可以大大提高办公自动化脚本的适用性,使其在企业内部的自动化系统或个人的办公效率工具中都能发挥重要作用,帮助用户节省时间和精力,提高工作效率。

希望本文对您有所帮助,如果您有任何问题或建议,欢迎留言讨论!

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

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

相关文章

ISP之DHCPv6-PD(前缀代理)为用户下发前缀

一、组网需求家庭用户要使用IPv6地址接入互联网。为方便用户接入,运营商使用DHCPv6-PD的方式给家用路由器下发IPv6地址前缀,用户路由器LAN侧不需要手工指定链路的IPv6地址前缀,家用路由器可以给用户终端自动配置IPv6地址和其它网络参数。本例…

Django全栈班v1.04 Python基础语法 20250912 上午

rm 删除命令 注意:删除操作是不可逆的,一旦删除就无法撤销,请谨慎使用。删除文件: rm file.py递归删除目录: rm -r demo/强制删除: rm -f file.py交互式删除: rm -i *.txt课程定位 “学习Python…

Java 21 虚拟线程高并发落地:中间件适配、场景匹配与细节优化的技术实践

作为 Java 21 的核心特性,虚拟线程(Virtual Thread)凭借 “用户态调度”“轻量级资源占用” 的优势,成为高并发场景下线程模型优化的重要方向。但在实际落地中,不少团队会陷入 “技术用了却没效果” 的困境 ——QPS 提升有限、中间件调用阻塞、CPU 使用率异常升高。 本文…

数据库在并发访问时,不同隔离级别下脏读幻读问题

数据库隔离级别并非安装后就固定,绝大多数主流数据库(如MySQL、PostgreSQL、SQL Server)都支持动态调整和运行中自定义,具体调整范围可分为全局、会话和语句三个层级。 全局级别调整:修改数据库配置文件(如…

JVM从入门到实战:从字节码组成、类生命周期到双亲委派及打破双亲委派机制

摘要:本文围绕 Java 字节码与类加载机制展开,详解字节码文件组成、类的生命周期,介绍类加载器分类、双亲委派机制及打破该机制的方式,还阐述了线程上下文类加载器与 SPI 机制在 JDBC 驱动加载中的应用,帮助深入理解 Ja…

多源最短路(Floyd算法

多源最短路简介 多源最短路算法用于解决图中任意两节点间最短路径的问题,广泛应用于交通网络、社交关系分析、路由优化等场景。与单源最短路(如Dijkstra)不同,它一次性计算所有节点对的最短距离,适合需要全局路径规划的…

【攻防实战】记一次攻防实战全流程

那天我向众神祈祷,最后回答我的却只有挣扎十年依旧不甘的自己!成功究竟是馈赠还是偿还。 前言 网络安全技术学习,承认⾃⼰的弱点不是丑事,只有对原理了然于⼼,才能突破更多的限制。 拥有快速学习能力的安全研究员&…

Anaconda配置环境变量和镜像

Anaconda配置环境变量和镜像 下载失败就是开了梯子 Anaconda 作用:包管理(集中,有序)和环境管理(版本切换)使用conda命令对虚拟环境创建、删除自带python解释器pip(python自带的包管理工具&…

给定单词倒排

实现代码&#xff1a;public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 输入的字符串String input scanner.nextLine();// 存储单词List<String> words new ArrayList<>();// 存储当前单词StringBuilder currentWord new S…

IO进程——进程引入、进程函数接口

一、引入1、进程&程序1.1 程序编译好的可执行的文件存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09;程序是静态的&#xff0c;没有任何执行的概念1.2 进程一个独立的可调度的任务执行一个程序所分配的资源的总称进程是程序执行的一次过程进程是动态的&…

周末游戏推荐:安卓端俄罗斯方块,经典与创新的结合

前段时间&#xff0c;每到周末我都会给大家推荐一些离线的经典游戏&#xff0c;原本打算将这个传统一直延续下去。然而&#xff0c;我实在找不到足够好用且无广告的游戏了。有些游戏刚开始用的时候还不错&#xff0c;但用着用着就开始频繁弹出广告&#xff0c;这让我实在不敢向…

《用 Scikit-learn 构建 SVM 分类模型:从原理到实战的全流程解析》

《用 Scikit-learn 构建 SVM 分类模型:从原理到实战的全流程解析》 一、引言:为什么选择 SVM? 在机器学习的众多算法中,支持向量机(SVM)以其强大的分类能力和良好的泛化性能,在文本分类、人脸识别、医学诊断等领域广泛应用。尤其在中小规模数据集上,SVM 往往能提供比…

一文学会CMakeLists.txt: CMake现代C++跨平台工程化实战

你能学到什么&#xff1f;朋友们好久不见&#xff0c;我是alibli&#xff0c;好久没有更新博客了。今天本人将通过构造一个实际的虚拟小项目&#xff0c;来让你彻底掌握CMake跨平台工程构建&#xff0c;学会CMakeLists.txt语法。该项目实现了一个简单的平方、立方的计算程序&am…

高并发场景下限流算法实践与性能优化指南

高并发场景下限流算法实践与性能优化指南 在大规模并发访问环境中&#xff0c;合理的限流策略能保护后端服务稳定运行&#xff0c;避免系统因瞬时高并发导致资源耗尽或崩溃。本文将从原理出发&#xff0c;深入解析几种主流限流算法&#xff0c;并结合Java和Redis给出完整可运行…

Vue3应用执行流程详解

精确化的完整执行流程 (以 Vite Vue3 SPA 为例)整个过程可以分为两部分&#xff1a;首次访问的“冷启动”和后续的Vue应用接管。第一部分&#xff1a;首次访问与页面加载客户端&#xff1a;发送请求用户打开浏览器&#xff0c;输入 URL&#xff08;如 http://localhost:5173&a…

Redis 持久化与高可用实践(RDB / AOF / Sentinel / Cluster 全解析)

这篇是我把几套生产环境踩坑与复盘整理成的一份“从 0 到 1 长期可维护”的实践文。目标是&#xff1a;明确策略、给出默认可用的配置模板、把常见坑一次讲透。 适用场景&#xff1a;新项目选型、老项目稳定性加固、从单机迁移到 HA/Cluster、应对数据安全与故障切换要求。目录…

Linux内核的PER_CPU机制

参考书《Linux内核模块开发技术指南》 1.原理 在多核CPU的情况下&#xff0c;为了提高CPU并发执行的效率&#xff0c;对于某些不是必须要在核间进行同步访问的资源&#xff0c;可以为每一个CPU创建一个副本&#xff0c;让每个CPU都访问自身的数据副本&#xff0c;而不是通过加锁…

VSCode 的百度 AI编程插件

VSCode 的百度 AI编程插件主要是 Baidu Comate&#xff08;文心快码&#xff09;&#xff0c;这是一款基于文心大模型的新一代编码辅助工具&#xff0c;旨在提升开发者的编码效率&#xff0c;让写代码变得更简单。以下是关于 Baidu Comate 的详细介绍&#xff1a; 一、功能特点…

阿里云监控使用

阿里云的云监控服务&#xff08;CloudMonitor&#xff09;是一款简单易用、功能强大的监控工具&#xff0c;主要用来帮助用户实时监控阿里云上的各种资源&#xff08;比如服务器、数据库、网络等&#xff09;&#xff0c;并在出现问题时及时发出警报&#xff0c;确保业务稳定运…

嵌入式C语言-关键字typedef

定义和作用 typedef是C/C中的一个关键字&#xff0c;作用是为现有的数据类型&#xff08;int 、char 、flaot等&#xff09;创建新的别名&#xff0c;其目的是为了方便阅读和理解代码。 用法 typedef 原有类型名 新类型名;基本类型创建别名 typedef unsigned char uint8_t; typ…