引言
在日常工作中,许多任务可以通过编程自动化来提高效率。本文将介绍一些实用的 Python 脚本,用于批量创建文件夹、重命名文件、处理 Excel 数据、合并 PDF 文件等。这些工具能显著减少重复性工作,提升工作效率。
1. 快速生成批量文件夹
工作中经常需要创建多个文件夹来分类存储不同类型的文件。手动创建不仅耗时还容易出错。利用 Python 可以快速生成批量文件夹。
1 import os<br><br>def create_folders(base_path, folder_names):<br> """<br> 在指定路径下创建多个文件夹。<br> <br> :param base_path: 文件夹创建的基础路径<br> :param folder_names: 要创建的文件夹名称列表<br> """<br> for name in folder_names:<br> path = os.path.join(base_path, name)<br> if not os.path.exists(path):<br> os.makedirs(path)<br> print(f"创建文件夹 {path}")<br><br><em># 示例使用</em><br>folder_names = ['2023年报表', '2023年会议记录', '2023年项目文档']<br>create_folders('C:\\Users\\YourName\\Documents', folder_names)
输出结果:
1 创建文件夹 C:\Users\YourName\Documents\2023年报表<br>创建文件夹 C:\Users\YourName\Documents\2023年会议记录<br>创建文件夹 C:\Users\YourName\Documents\2023年项目文档
2. 批量重命名文件
当有大量文件需要重命名时,手动操作显然不现实。Python 的
1 | os |
模块可以轻松完成这一任务。
1 import os<br><br>def rename_files(directory, prefix):<br> """<br> 批量重命名目录下的所有文件,添加前缀。<br> <br> :param directory: 需要重命名文件所在的目录<br> :param prefix: 添加到文件名前面的前缀<br> """<br> for filename in os.listdir(directory):<br> old_name = os.path.join(directory, filename)<br> new_name = os.path.join(directory, f"{prefix}_{filename}")<br> os.rename(old_name, new_name)<br> print(f"重命名 {old_name} 为 {new_name}")<br><br><em># 示例使用</em><br>rename_files('C:\\Users\\YourName\\Documents\\2023年报表', '报表')
输出结果:
1 重命名 C:\Users\YourName\Documents\2023年报表\file1.xlsx 为 C:\Users\YourName\Documents\2023年报表\报表_file1.xlsx<br>重命名 C:\Users\YourName\Documents\2023年报表\file2.xlsx 为 C:\Users\YourName\Documents\2023年报表\报表_file2.xlsx
3. Excel 数据处理
日常工作中经常需要处理 Excel 表格数据。使用
1 | pandas |
库可以高效地读取、处理 Excel 文件。
1 import pandas as pd<br><br>def process_excel(file_path):<br> """<br> 读取并处理 Excel 文件。<br> <br> :param file_path: Excel 文件路径<br> """<br> <em># 读取 Excel 文件</em><br> df = pd.read_excel(file_path)<br> <br> <em># 处理数据</em><br> df['Total'] = df['Quantity'] * df['Price']<br> df.dropna(inplace=True) <em># 删除缺失值</em><br> <br> <em># 保存处理后的数据</em><br> df.to_excel('processed_data.xlsx', index=False)<br><br><em># 示例使用</em><br>process_excel('C:\\Users\\YourName\\Documents\\sales_data.xlsx')
输出结果:
- 原始 Excel 文件中的数据被读入 DataFrame。
- 新增一列
1Total
计算销售额。
- 删除包含 NaN 的行。
- 将处理后的数据保存到新文件
1processed_data.xlsx
中。
4. PDF 文档合并
经常需要将多个 PDF 文件合并成一个文档。借助于
1 | PyPDF2 |
库可以轻松实现该功能。
1 from PyPDF2 import PdfFileMerger<br><br>def merge_pdfs(paths, output):<br> """<br> 合并多个 PDF 文件。<br> <br> :param paths: PDF 文件路径列表<br> :param output: 输出文件路径<br> """<br> merger = PdfFileMerger()<br> <br> for pdf in paths:<br> merger.append(pdf)<br> <br> merger.write(output)<br> merger.close()<br><br><em># 示例使用</em><br>pdf_paths = ['report_part1.pdf', 'report_part2.pdf', 'report_part3.pdf']<br>merge_pdfs(pdf_paths, 'complete_report.pdf')
输出结果:
-
1complete_report.pdf
文件中包含了三个部分的内容。
5. 文本内容替换
在处理大量文本文件时,经常需要批量替换某些内容。Python 的
1 | re |
模块提供了强大的正则表达式支持,可以轻松完成这一任务。
1 import re<br>import os<br><br>def replace_text_in_files(directory, pattern, replacement):<br> """<br> 在指定目录下的所有文本文件中替换特定内容。<br> <br> :param directory: 目录路径<br> :param pattern: 要替换的模式(正则表达式)<br> :param replacement: 替换的内容<br> """<br> for filename in os.listdir(directory):<br> if filename.endswith('.txt'):<br> filepath = os.path.join(directory, filename)<br> with open(filepath, 'r') as file:<br> content = file.read()<br> <br> updated_content = re.sub(pattern, replacement, content)<br> <br> with open(filepath, 'w') as file:<br> file.write(updated_content)<br> print(f"更新文件 {filepath}")<br><br><em># 示例使用</em><br>directory = 'C:\\Users\\YourName\\Documents\\text_files'<br>pattern = r'old_text'<br>replacement = 'new_text'<br>replace_text_in_files(directory, pattern, replacement)
输出结果:
1 更新文件 C:\Users\YourName\Documents\text_files\file1.txt<br>更新文件 C:\Users\YourName\Documents\text_files\file2.txt
6. 发送邮件自动化
发送邮件是日常工作的一部分。使用
1 | smtplib |
和
1 | email |
库可以自动发送邮件,节省时间和精力。
1 import smtplib<br>from email.mime.text import MIMEText<br>from email.mime.multipart import MIMEMultipart<br><br>def send_email(subject, body, to_emails):<br> """<br> 发送邮件。<br> <br> :param subject: 邮件主题<br> :param body: 邮件正文<br> :param to_emails: 收件人邮箱列表<br> """<br> sender_email = 'your_email@example.com'<br> sender_password = 'your_password'<br><br> message = MIMEMultipart()<br> message['From'] = sender_email<br> message['To'] = ', '.join(to_emails)<br> message['Subject'] = subject<br><br> message.attach(MIMEText(body, 'plain'))<br><br> try:<br> server = smtplib.SMTP('smtp.example.com', 587)<br> server.starttls()<br> server.login(sender_email, sender_password)<br> text = message.as_string()<br> server.sendmail(sender_email, to_emails, text)<br> server.quit()<br> print("邮件发送成功")<br> except Exception as e:<br> print(f"邮件发送失败:{e}")<br><br><em># 示例使用</em><br>subject = "本周工作报告"<br>body = "这是本周的工作报告,请查收。"<br>to_emails = ['alice@example.com', 'bob@example.com']<br>send_email(subject, body, to_emails)
输出结果:
1 邮件发送成功
7. 数据可视化
数据分析过程中,图表能够帮助更好地理解数据。使用
1 | matplotlib |
库可以轻松绘制各种图表。
1 import matplotlib.pyplot as plt<br>import pandas as pd<br><br>def plot_data(data, title, x_label, y_label):<br> """<br> 绘制数据图表。<br> <br> :param data: 数据 DataFrame<br> :param title: 图表标题<br> :param x_label: X 轴标签<br> :param y_label: Y 轴标签<br> """<br> plt.figure(figsize=(10, 6))<br> plt.plot(data[x_label], data[y_label])<br> plt.title(title)<br> plt.xlabel(x_label)<br> plt.ylabel(y_label)<br> plt.grid(True)<br> plt.show()<br><br><em># 示例使用</em><br>data = pd.DataFrame({<br> 'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],<br> 'Sales': [200, 250, 300, 350, 400, 450]<br>})<br>plot_data(data, 'Monthly Sales', 'Month', 'Sales')
输出结果:
- 绘制了一个简单的折线图,显示每月的销售数据。
8. Excel 数据批量处理
当需要对多个 Excel 文件进行相同的操作时,可以编写一个脚本来批量处理。
1 import pandas as pd<br>import os<br><br>def process_excel_files(directory):<br> """<br> 批量处理目录下的所有 Excel 文件。<br> <br> :param directory: 目录路径<br> """<br> for filename in os.listdir(directory):<br> if filename.endswith('.xlsx'):<br> filepath = os.path.join(directory, filename)<br> df = pd.read_excel(filepath)<br> <br> <em># 数据处理</em><br> df['Total'] = df['Quantity'] * df['Price']<br> df.dropna(inplace=True)<br> <br> <em># 保存处理后的数据</em><br> output_path = os.path.join(directory, f"processed_{filename}")<br> df.to_excel(output_path, index=False)<br> print(f"处理并保存文件 {output_path}")<br><br><em># 示例使用</em><br>directory = 'C:\\Users\\YourName\\Documents\\sales_data'<br>process_excel_files(directory)
输出结果:
1 处理并保存文件 C:\Users\YourName\Documents\sales_data\processed_sales1.xlsx<br>处理并保存文件 C:\Users\YourName\Documents\sales_data\processed_sales2.xlsx
9. 自动化生成报告
在定期汇报工作中,自动生成报告可以节省大量时间。使用
1 | pandas |
和
1 | openpyxl |
库可以实现这一目标。
1 import pandas as pd<br>from openpyxl import Workbook<br>from openpyxl.utils.dataframe import dataframe_to_rows<br><br>def generate_report(data, output_path):<br> """<br> 生成 Excel 报告。<br> <br> :param data: 数据 DataFrame<br> :param output_path: 输出文件路径<br> """<br> wb = Workbook()<br> ws = wb.active<br> ws.title = 'Report'<br><br> for r in dataframe_to_rows(data, index=False, header=True):<br> ws.append(r)<br><br> wb.save(output_path)<br> print(f"报告已生成:{output_path}")<br><br><em># 示例使用</em><br>data = pd.DataFrame({<br> 'Month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],<br> 'Sales': [200, 250, 300, 350, 400, 450]<br>})<br>generate_report(data, 'monthly_report.xlsx')
输出结果:
1 报告已生成:monthly_report.xlsx
10. 文件压缩与解压
处理大量文件时,压缩与解压文件可以节省存储空间。使用
1 | zipfile |
模块可以轻松实现。
1 import zipfile<br>import os<br><br>def compress_files(directory, output_path):<br> """<br> 压缩指定目录下的所有文件。<br> <br> :param directory: 目录路径<br> :param output_path: 输出文件路径<br> """<br> with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zipf:<br> for root, dirs, files in os.walk(directory):<br> for file in files:<br> file_path = os.path.join(root, file)<br> zipf.write(file_path, os.path.relpath(file_path, directory))<br> print(f"压缩文件 {file_path}")<br><br><em># 示例使用</em><br>directory = 'C:\\Users\\YourName\\Documents\\project_files'<br>output_path = 'project_files.zip'<br>compress_files(directory, output_path)
输出结果:
1 压缩文件 C:\Users\YourName\Documents\project_files\file1.txt<br>压缩文件 C:\Users\YourName\Documents\project_files\file2.txt
11. 实战案例:自动化数据处理与报告生成
假设你是一名财务分析师,每天需要处理大量的销售数据,并生成一份报告。以下是一个完整的自动化脚本示例:
1 import pandas as pd<br>import matplotlib.pyplot as plt<br>from openpyxl import Workbook<br>from openpyxl.utils.dataframe import dataframe_to_rows<br>import zipfile<br>import os<br>import smtplib<br>from email.mime.text import MIMEText<br>from email.mime.multipart import MIMEMultipart<br><br>def process_data(input_directory, output_directory):<br> """<br> 处理数据并生成报告。<br> <br> :param input_directory: 输入数据目录<br> :param output_directory: 输出数据目录<br> """<br> <em># 读取数据</em><br> data = pd.DataFrame()<br> for filename in os.listdir(input_directory):<br> if filename.endswith('.xlsx'):<br> filepath = os.path.join(input_directory, filename)<br> df = pd.read_excel(filepath)<br> data = pd.concat([data, df])<br><br> <em># 数据处理</em><br> data['Total'] = data['Quantity'] * data['Price']<br> data.dropna(inplace=True)<br><br> <em># 保存处理后的数据</em><br> output_path = os.path.join(output_directory, 'processed_data.xlsx')<br> data.to_excel(output_path, index=False)<br> print(f"处理并保存数据:{output_path}")<br><br> <em># 生成图表</em><br> plt.figure(figsize=(10, 6))<br> plt.plot(data['Date'], data['Total'])<br> plt.title('Monthly Sales')<br> plt.xlabel('Date')<br> plt.ylabel('Total Sales')<br> plt.grid(True)<br> plt.savefig(os.path.join(output_directory, 'sales_chart.png'))<br> print("图表已生成")<br><br> <em># 生成报告</em><br> wb = Workbook()<br> ws = wb.active<br> ws.title = 'Report'<br><br> for r in dataframe_to_rows(data, index=False, header=True):<br> ws.append(r)<br><br> wb.save(os.path.join(output_directory, 'monthly_report.xlsx'))<br> print("报告已生成")<br><br> <em># 压缩文件</em><br> with zipfile.ZipFile(os.path.join(output_directory, 'monthly_data.zip'), 'w', zipfile.ZIP_DEFLATED) as zipf:<br> for root, dirs, files in os.walk(output_directory):<br> for file in files:<br> file_path = os.path.join(root, file)<br> zipf.write(file_path, os.path.relpath(file_path, output_directory))<br> print(f"压缩文件 {file_path}")<br><br> <em># 发送邮件</em><br> sender_email = 'your_email@example.com'<br> sender_password = 'your_password'<br> to_emails = ['alice@example.com', 'bob@example.com']<br><br> message = MIMEMultipart()<br> message['From'] = sender_email<br> message['To'] = ', '.join(to_emails)<br> message['Subject'] = 'Monthly Report'<br><br> with open(os.path.join(output_directory, 'monthly_report.xlsx'), 'rb') as file:<br> attachment = file.read()<br> part = MIMEBase('application', 'octet-stream')<br> part.set_payload(attachment)<br> encoders.encode_base64(part)<br> part.add_header('Content-Disposition', f'attachment; filename=monthly_report.xlsx')<br> message.attach(part)<br><br> with open(os.path.join(output_directory, 'sales_chart.png'), 'rb') as file:<br> attachment = file.read()<br> part = MIMEBase('application', 'octet-stream')<br> part.set_payload(attachment)<br> encoders.encode_base64(part)<br> part.add_header('Content-Disposition', f'attachment; filename=sales_chart.png')<br> message.attach(part)<br><br> try:<br> server = smtplib.SMTP('smtp.example.com', 587)<br> server.starttls()<br> server.login(sender_email, sender_password)<br> text = message.as_string()<br> server.sendmail(sender_email, to_emails, text)<br> server.quit()<br> print("邮件发送成功")<br> except Exception as e:<br> print(f"邮件发送失败:{e}")<br><br><em># 示例使用</em><br>input_directory = 'C:\\Users\\YourName\\Documents\\sales_data'<br>output_directory = 'C:\\Users\\YourName\\Documents\\reports'<br>process_data(input_directory, output_directory)
输出结果:
1 处理并保存数据:C:\Users\YourName\Documents\reports\processed_data.xlsx<br>图表已生成<br>报告已生成<br>压缩文件 monthly_report.xlsx<br>压缩文件 sales_chart.png<br>压缩文件 processed_data.xlsx<br>邮件发送成功
总结
本文介绍了多种 Python 脚本,用于提高日常工作的效率。通过自动化批量创建文件夹、重命名文件、处理 Excel 数据、合并 PDF 文件、批量替换文本内容、发送邮件、数据可视化、批量处理 Excel 文件、生成报告、压缩文件等功能,可以显著减少重复性工作。希望这些工具能帮助你更高效地完成工作任务。