【Python入门】20个Python自动化脚本,解放双手、事半功倍

news2024/11/6 9:29:19

 如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享!


在当今的快节奏工作环境中,自动化不再是一种奢侈,而是提高效率和精确性的必需手段。Python,以其易于学习和强大的功能而闻名,成为实现各种自动化任务的理想选择。无论是数据处理、报告生成,还是日常的文件管理,一个简单但有效的Python脚本就能大幅减轻您的工作负担。在本文中,我们将探索如何使用Python来创建多个自动化脚本,它不仅能够节省您的时间,还可以提高工作的准确率和效率。我们先来看第一个自动化脚本

自动化文件管理

整理目录中的文件

import os
from shutil import move

def sort_files(directory_path):
    for filename in os.listdir(directory_path):
        if os.path.isfile(os.path.join(directory_path, filename)):
            # 获取文件扩展名
            file_extension = filename.split('.')[-1]
            # 创建目标目录
            destination_directory = os.path.join(directory_path, file_extension)
            if not os.path.exists(destination_directory):
                os.makedirs(destination_directory)
            # 移动文件
            move(os.path.join(directory_path, filename), 
                 os.path.join(destination_directory, filename))

# 调用函数,替换路径
sort_files('your_directory_path')

这段代码包含一个名为sort_files的函数,它接受一个目录路径作为参数。函数遍历指定目录中的所有文件,并检查每个文件是否是一个常规文件(非目录等)。对于每个文件,它提取出文件的扩展名,创建一个以该扩展名命名的新目录(如果该目录不存在的话),然后将文件移动到新创建的对应扩展名的目录中。

移除空白的文档

import os

def remove_empty_folders(directory_path):
    # 遍历目录树
    for root, dirs, files in os.walk(directory_path, topdown=False):
        for folder in dirs:
            folder_path = os.path.join(root, folder)
            # 如果目录为空,则删除
            if not os.listdir(folder_path):
                os.rmdir(folder_path)

# 替换下面的路径为自己想清理的目录的路径
remove_empty_folders('your_directory_path')

这段代码定义了一个名为remove_empty_folders的函数,它接受一个目录路径作为参数。函数使用os.walk遍历给定目录及其所有子目录。os.walk函数以topdown=False的方式执行,这意味着遍历将从目录树的最底层开始,确保在删除空目录之前已处理了所有子目录。

对于每个找到的目录,代码检查该目录是否为空(即不包含任何文件或子目录)。如果是空目录,它就使用os.rmdir函数将其删除。

多个文件的重命名

import os

def rename_files(directory_path, old_name, new_name):
    # 遍历目录中的所有文件
    for filename in os.listdir(directory_path):
        # 检查文件名中是否包含旧名称
        if old_name in filename:
            # 生成新的文件名
            new_filename = filename.replace(old_name, new_name)
            # 重命名文件
            os.rename(os.path.join(directory_path, filename), 
                      os.path.join(directory_path, new_filename))

# 替换下面的路径和名称
# 例如 directory_path: 您要重命名文件的目录路径
rename_files('your_directory_path', 'old_name', 'new_name')

这段代码定义了一个名为rename_files的函数,它接受三个参数:要处理的目录的路径、需要被替换的旧名称、以及新名称。该函数遍历指定目录中的所有文件,检查每个文件名是否包含旧名称。如果包含,它会用str.replace方法生成一个新的文件名,然后使用os.rename方法将文件重命名。

Excel办公自动化软件

读取和写入

import pandas as pd

def read_excel(file_path):
    # 读取Excel文件
    df = pd.read_excel(file_path)
    return df

def write_to_excel(data, file_path):
    # 将数据写入Excel文件
    df = pd.DataFrame(data)
    df.to_excel(file_path, index=False)

# 读取Excel文件
dataframe = read_excel('path_to_your_input_file.xlsx')

# 将修改后的数据写入新的Excel文件
write_to_excel(dataframe, 'path_to_your_output_file.xlsx')

我们主要是调用pandas模块中的read_excel函数接受一个文件路径作为参数并且读取Excel文件,并将其作为DataFrame返回。write_to_excel函数则接受一个数据集和一个输出文件路径,将数据集转换为DataFrame,然后使用to_excel方法写入Excel文件。在to_excel方法中,index=False参数表示在输出的Excel文件中不包括行索引。

合并多个工作表

import pandas as pd

def merge_sheets(file_path, output_file_path):
    # 打开Excel文件
    xls = pd.ExcelFile(file_path)
    # 创建一个空的DataFrame
    df = pd.DataFrame()

    # 遍历所有工作表
    for sheet_name in xls.sheet_names:
        # 读取每个工作表
        sheet_df = pd.read_excel(xls, sheet_name)
        # 将每个工作表的数据追加到df中
        df = df.append(sheet_df, ignore_index=True)

    # 将合并后的数据写入新的Excel文件
    df.to_excel(output_file_path, index=False)

# 替换为自己的文件路径
merge_sheets('path_to_your_excel_file.xlsx', 'path_to_your_output_file.xlsx')

这段代码定义了一个名为merge_sheets的函数,它接受原始Excel文件的路径和输出文件的路径作为参数。函数首先使用pd.ExcelFile读取Excel文件,并创建一个空的DataFrame。然后,它遍历该Excel文件中的所有工作表,使用pd.read_excel逐个读取它们,并通过append方法将每个工作表的数据追加到之前创建的空DataFrame中。这里使用了ignore_index=True,意味着在合并数据时会重新生成索引。

最后,使用to_excel方法将合并后的数据保存到一个新的Excel文件中。在这个方法中,index=False参数表示在输出文件中不包括行索引。

图片处理

图片的修剪

from PIL import Image

def resize_image(input_path, output_path, width, height):
    # 打开图片
    image = Image.open(input_path)
    # 调整图片大小
    resized_image = image.resize((width, height), Image.ANTIALIAS)
    # 保存调整后的图片
    resized_image.save(output_path)

def crop_image(input_path, output_path, left, top, right, bottom):
    # 打开图片
    image = Image.open(input_path)
    # 裁剪图片
    cropped_image = image.crop((left, top, right, bottom))
    # 保存裁剪后的图片
    cropped_image.save(output_path)

# 替换为自己的文件路径和参数
resize_image('path_to_input_image.jpg', 'path_to_resized_image.jpg', 800, 600)
crop_image('path_to_input_image.jpg', 'path_to_cropped_image.jpg', 100, 100, 400, 400)

resize_image函数中,它接受输入路径、输出路径、以及新图片的宽度和高度作为参数。该函数使用PIL库打开图片,然后调用resize方法将图片大小调整为指定的宽度和高度。

crop_image函数接受输入路径、输出路径,以及裁剪区域的左、上、右、下四个坐标作为参数。该函数同样使用PIL库打开图片,然后使用crop方法根据提供的坐标裁剪图片。

添加水印

from PIL import Image, ImageDraw, ImageFont

def add_watermark(input_path, output_path, watermark_text):
    # 打开图片
    image = Image.open(input_path)
    # 准备绘制对象
    draw = ImageDraw.Draw(image)
    # 设置字体(这里使用Arial,大小为36)
    font = ImageFont.truetype('arial.ttf', 36)
    # 在图片上添加水印文字
    draw.text((10, 10), watermark_text, fill=(255, 255, 255, 128), font=font)
    # 保存带有水印的图片
    image.save(output_path)

# 替换为自己的文件路径和水印文本
add_watermark('path_to_input_image.jpg', 'path_to_watermarked_image.jpg', 'Your Watermark Text')

这段代码定义了一个名为add_watermark的函数,它接受输入图片的路径、输出图片的路径和水印文本作为参数。该函数首先使用PIL库打开图片,然后创建一个ImageDraw对象以便在图片上绘制文本。接下来,设置字体(本例中使用Arial字体,字号为36),并使用draw.text方法将水印文本绘制到图片上。最后,保存带有水印的图片到指定的输出路径。

创建缩略图

from PIL import Image

def create_thumbnail(input_path, output_path, size=(128, 128)):
    # 打开图片
    image = Image.open(input_path)
    # 创建缩略图
    image.thumbnail(size)
    # 保存缩略图
    image.save(output_path)

# 替换为自己的文件路径
create_thumbnail('path_to_input_image.jpg', 'path_to_thumbnail_image.jpg')

在这段代码中,create_thumbnail函数接受三个参数:输入图片的路径、输出图片的路径,以及缩略图的尺寸(默认为128x128像素)。函数使用PIL库打开原始图片,然后调用thumbnail方法来创建缩略图。

系统任务

系统进程管理

import psutil

def get_running_processes():
    # 获取当前运行的进程信息
    return [p.info for p in psutil.process_iter(['pid', 'name', 'username'])]

def kill_process_by_name(process_name):
    # 遍历当前运行的进程
    for p in psutil.process_iter(['pid', 'name', 'username']):
        # 如果进程名匹配,则终止进程
        if p.info['name'] == process_name:
            p.kill()

# 获取运行中的进程列表
running_processes = get_running_processes()

# 杀死指定名称的进程(请谨慎使用)
# kill_process_by_name('process_name_here')

get_running_processes函数中,使用psutil.process_iter方法来迭代当前运行的所有进程,并获取每个进程的pid(进程ID)、name(进程名)和username(运行该进程的用户)。这些信息被收集在一个列表中并返回。

kill_process_by_name函数也使用psutil.process_iter来遍历所有进程,但它检查每个进程的名称是否与给定的process_name相匹配。如果找到匹配的进程,它使用kill方法终止该进程。

PDF文件操作

多个PDF文件合并

import PyPDF2

def merge_pdfs(input_paths, output_path):
    # 创建PDF合并器对象
    pdf_merger = PyPDF2.PdfMerger()
    
    # 遍历所有输入路径并添加到合并器
    for path in input_paths:
        with open(path, 'rb') as f:
            pdf_merger.append(f)
    
    # 将合并后的PDF写入输出文件
    with open(output_path, 'wb') as f:
        pdf_merger.write(f)

# 替换为自己的PDF文件路径
input_pdf_paths = ['pdf1.pdf', 'pdf2.pdf', 'pdf3.pdf']
output_pdf_path = 'merged.pdf'
merge_pdfs(input_pdf_paths, output_pdf_path)

在这个脚本中,merge_pdfs函数接受两个参数:一个包含要合并的PDF文件路径的列表input_paths和一个输出文件路径output_path。函数首先创建了一个PyPDF2.PdfMerger对象,然后逐个打开输入列表中的PDF文件,并使用append方法将它们添加到合并器中。最后,使用write方法将合并后的PDF输出到指定的文件路径。

PDF文件密码保护

import PyPDF2

def add_password_protection(input_path, output_path, password):
    # 打开要加密的PDF文件
    with open(input_path, 'rb') as f:
        pdf_reader = PyPDF2.PdfFileReader(f)
        pdf_writer = PyPDF2.PdfFileWriter()

        # 复制所有页面到写入器对象
        for page_num in range(pdf_reader.numPages):
            page = pdf_reader.getPage(page_num)
            pdf_writer.addPage(page)

        # 为PDF文件设置密码
        pdf_writer.encrypt(password)

        # 写入加密后的PDF到输出文件
        with open(output_path, 'wb') as output_file:
            pdf_writer.write(output_file)

# 请替换为自己的文件路径和密码
input_pdf_path = 'input.pdf'
output_pdf_path = 'protected.pdf'
password = 'your_password'
add_password_protection(input_pdf_path, output_pdf_path, password)

在这段代码中,add_password_protection函数接受输入文件路径input_path、输出文件路径output_path和密码password作为参数。它首先打开输入的PDF文件,使用PyPDF2.PdfFileReader读取PDF内容。然后,创建一个PyPDF2.PdfFileWriter对象,将从读取器对象中获取的所有页面添加到写入器对象中。使用encrypt方法为PDF设置密码。最后,将加密后的PDF内容写入到输出文件中。

如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享!或扫描下方CSDN官方微信二维码获娶Python入门&进阶全套学习资料、电子书、软件包、项目源码

 

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

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

相关文章

谷歌浏览器完美清除缓存

1.在页面上按下键盘的F12,打开控制台。 2.鼠标放到刷新图标上,点击鼠标右键,选择‘清空缓存并硬性重新加载’。 这样浏览器对网站页面的缓存就彻底被清理干净了。 目前支持该操作方式的浏览器有谷歌和Edge浏览器。 有的浏览器不支持该方式操…

线上热迁移数据库

1、背景 在线平台用的是公司自己的服务器上面搭建的 MongoDB,测试那边反馈珊瑚海平台 MongoDB 有时会掉线,于是计划将本地数据库迁移到云平台。 2、问题所在 1、因为平台测试的同事还在正在使用平台进行测试工作,所以不可能把平台停掉&…

Web认识 -- 第一课

文章目录 前言一、HTML是什么?二、了解Web1. 基本概念2.Web标准3. Web构成1.前端1. HTML2.CSS3. javaScript4.常见浏览器介绍 2.Web标签构成1.结构标准2.表现标准 -- css3. 行为标准 -- javaScript 总结 前言 这里是我们进入前端学习的开端,在本次更新之后我会陆续…

VUE前后端分离毕业设计题目项目有哪些,VUE程序开发常见毕业论文设计推荐

目录 0 为什么选择Vue.js 1 Vue.js 的主要特点 2 前后端分离毕业设计项目推荐 3 后端推荐 4 总结 0 为什么选择Vue.js 使用Vue.js开发计算机毕业设计是一个很好的选择,因为它不仅具有现代前端框架的所有优点,还能让你专注于构建高性能、高可用性的W…

【C++】map和set的介绍和使用

1.序列式容器与关联式容器 序列式容器&#xff1a; 底层为线性序列的数据结构&#xff0c; 里面存储的是元素本身 。如vector/list/string/deque/forward_list。 关联式容器&#xff1a; 也是用来存储数据的&#xff0c;于序列式容器不同的是&#xff0c; 里面存储的是<key&…

一文详解WebRTC、RTSP、RTMP、SRT

背景 好多开发者&#xff0c;希望对WebRTC、RTSP、RTMP、SRT有个初步的了解&#xff0c;知道什么场景该做怎样的方案选择&#xff0c;本文就四者区别做个大概的介绍。 WebRTC 提到WebRTC&#xff0c;相信好多开发者第一件事想到的就是低延迟&#xff0c;WebRTC&#xff08;W…

基于IntraWeb的数据表格的多选实现

基于IntraWeb的数据表格的多选实现 既可以单条操作&#xff0c;也可以多选操作。 delphi源代码。 BS开发Web网站开发&#xff0c;不需要安装服务器&#xff0c;Apache和IIS都不需要&#xff0c;自带企业级服务器。 运行exe服务器就架好了&#xff0c;直接打开手机浏览器或者…

技术成神之路:设计模式(十八)适配器模式

介绍 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许接口不兼容的类可以协同工作&#xff0c;通过将一个类的接口转换成客户端所期望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的类可以一起工作。 1.定义 适配…

防止错误输入!Excel单元格限制输入内容的三种有效方式

在Excel中&#xff0c;限制单元格输入内容可以帮助避免数据输入错误&#xff0c;确保数据的一致性和准确性。今天小编分享三种方法&#xff0c;可以轻松限制Excel单元格的输入内容&#xff0c;确保数据输入符合预期要求&#xff0c;一起来看看吧&#xff01; 方法一&#xff1a…

超声波清洗机哪家好用又实惠?2024热门超声波清洗机选择推荐!

经过长时间在眼镜清洁领域的深耕&#xff0c;超声波清洗技术已积累广泛用户群体的信任。市场虽繁荣&#xff0c;但也暴露出产品质量的多样性问题&#xff0c;特别是那些依赖营销手段走红的网络品牌或跨行业巨头&#xff0c;它们倾向于强化市场推广而忽视了核心技术的研发。这导…

AI日常绘画【国庆海报】:盛世迎华诞,Flux国庆节海报制作教程

大家好我是极可菌&#xff01;&#xff01;&#xff01; 马上就要到祖国母亲的节日了&#xff0c;想想心里都美滋滋的&#xff0c;终于可以放松一下了。相信AI绘画关于国庆主题肯定也会精彩纷呈吧&#xff0c;今天和大家分享几组关于国庆海报的制作教程。 本文使用基于Flux的相…

一款好用的图像处理软件:Photoshop

Photoshop 常被简称为PS&#xff0c;是图像处理领域里最常用也是很重要的一个工具。在平面广告设计、印刷出版等各领域有有着重要的作用。利用Photoshop图像处理软件&#xff0c;可以设计制作报纸、杂志、书籍、招贴广告、海报、建筑效果图、网页等各种精美的作品&#xff0c;普…

基于大数据技术的共享单车数据分析与辅助管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

mybatis-plus ==> 入门教程

文章目录 为什么要学呢&#xff1f;注意事项 简单入门案例配置日志雪花算法更改 ID 的方法 CRUD插入&#xff08;不解释了&#xff0c;代码非常简单&#xff09;更新查询&#xff08;批量查询&#xff09;按条件查询分页查询删除&#xff08;批量、通过条件、逻辑删除&#xff…

汇川AM400脉冲速度轴(轴控功能块ST源代码)

1、汇川AM400脉冲轴位置控制功能块 汇川AM400脉冲轴控制(轴控功能块ST源代码)-CSDN博客文章浏览阅读292次。汇川AM400电子齿轮指令详细应用介绍(CODESYS ST代码)_汇川plc am400 案例-CSDN博客文章浏览阅读146次。本文介绍了在使用汇川AM400电子齿轮指令前需要理解的比例随动概…

【SQLite】基础操作

数据查询 SELECT 查询所有数据 SELECT *FROM tableName使用AND操作符 SELECT * FROM tableName WHERE id=? AND name=?使用OR操作符 SELECT * FROM tableName WHERE id=? OR name=?组合使用AND和OR SELECT * FROM tableName WHERE (id=? AND name=?) OR status=?多表查询…

Python基础知识---入门概念

有些人不属于自己&#xff0c;但是遇见了也弥足珍贵。 -- 青山刚昌 《名侦探柯南》 安装python解释器 下载官网&#xff1a; Welcome to Python.org 安装pycharm编辑器 下载官网&#xff1a;Download PyCharm: The Python IDE for data science and web development by Je…

基于大数据的二手电子产品需求分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

ARM Process state -- SPSR

Holds the saved process state for the current mode. 保存当前模式的已保存进程状态。 N, bit [31] Set to the value of PSTATE.N on taking an exception to the current mode, and copied to PSTATE.N on executing an exception return operation in the current mod…

项目:微服务即时通讯系统客户端(基于C++QT)]四,中间界面搭建和逻辑准备

四&#xff0c;中间界面搭建 前言:当项目越来越复杂的时候&#xff0c;或许画草图是非常好的选择 一&#xff0c;初始化中间窗口initMidWindow void mainWidget::initMidWindow() {//使用网格布局进行管理QGridLayout* layout new QGridLayout();//距离上方 20px 的距离&…