Python增强办公效率的11个实用代码段,零基础入门到精通,收藏这一篇就够了

758 篇文章 36 订阅
262 篇文章 11 订阅

引言

在日常工作中,许多任务可以通过编程自动化来提高效率。本文将介绍一些实用的 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 文件、生成报告、压缩文件等功能,可以显著减少重复性工作。希望这些工具能帮助你更高效地完成工作任务。

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]


在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
在这里插入图片描述

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值