PYTHON基础技能 – Python增强办公效率的11个实用代码段

释放双眼,带上耳机,听听看~!

引言

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

1. 快速生成批量文件夹

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


1
import&nbsp;os<br><br>def&nbsp;create_folders(base_path,&nbsp;folder_names):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;在指定路径下创建多个文件夹。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;base_path:&nbsp;文件夹创建的基础路径<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;folder_names:&nbsp;要创建的文件夹名称列表<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;name&nbsp;in&nbsp;folder_names:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;=&nbsp;os.path.join(base_path,&nbsp;name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;os.path.exists(path):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.makedirs(path)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"创建文件夹&nbsp;{path}")<br><br><em>#&nbsp;示例使用</em><br>folder_names&nbsp;=&nbsp;&#091;'2023年报表',&nbsp;'2023年会议记录',&nbsp;'2023年项目文档']<br>create_folders('C:\\Users\\YourName\\Documents',&nbsp;folder_names)

输出结果:


1
创建文件夹&nbsp;C:\Users\YourName\Documents\2023年报表<br>创建文件夹&nbsp;C:\Users\YourName\Documents\2023年会议记录<br>创建文件夹&nbsp;C:\Users\YourName\Documents\2023年项目文档

2. 批量重命名文件

当有大量文件需要重命名时,手动操作显然不现实。Python 的

1
os

模块可以轻松完成这一任务。


1
import&nbsp;os<br><br>def&nbsp;rename_files(directory,&nbsp;prefix):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;批量重命名目录下的所有文件,添加前缀。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;directory:&nbsp;需要重命名文件所在的目录<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;prefix:&nbsp;添加到文件名前面的前缀<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;filename&nbsp;in&nbsp;os.listdir(directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;old_name&nbsp;=&nbsp;os.path.join(directory,&nbsp;filename)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_name&nbsp;=&nbsp;os.path.join(directory,&nbsp;f"{prefix}_{filename}")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.rename(old_name,&nbsp;new_name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"重命名&nbsp;{old_name}&nbsp;为&nbsp;{new_name}")<br><br><em>#&nbsp;示例使用</em><br>rename_files('C:\\Users\\YourName\\Documents\\2023年报表',&nbsp;'报表')

输出结果:


1
重命名&nbsp;C:\Users\YourName\Documents\2023年报表\file1.xlsx&nbsp;为&nbsp;C:\Users\YourName\Documents\2023年报表\报表_file1.xlsx<br>重命名&nbsp;C:\Users\YourName\Documents\2023年报表\file2.xlsx&nbsp;为&nbsp;C:\Users\YourName\Documents\2023年报表\报表_file2.xlsx

3. Excel 数据处理

日常工作中经常需要处理 Excel 表格数据。使用

1
pandas

库可以高效地读取、处理 Excel 文件。


1
import&nbsp;pandas&nbsp;as&nbsp;pd<br><br>def&nbsp;process_excel(file_path):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;读取并处理&nbsp;Excel&nbsp;文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;file_path:&nbsp;Excel&nbsp;文件路径<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;读取&nbsp;Excel&nbsp;文件</em><br>&nbsp;&nbsp;&nbsp;&nbsp;df&nbsp;=&nbsp;pd.read_excel(file_path)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;处理数据</em><br>&nbsp;&nbsp;&nbsp;&nbsp;df&#091;'Total']&nbsp;=&nbsp;df&#091;'Quantity']&nbsp;*&nbsp;df&#091;'Price']<br>&nbsp;&nbsp;&nbsp;&nbsp;df.dropna(inplace=True)&nbsp;&nbsp;<em>#&nbsp;删除缺失值</em><br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;保存处理后的数据</em><br>&nbsp;&nbsp;&nbsp;&nbsp;df.to_excel('processed_data.xlsx',&nbsp;index=False)<br><br><em>#&nbsp;示例使用</em><br>process_excel('C:\\Users\\YourName\\Documents\\sales_data.xlsx')

输出结果:

  • 原始 Excel 文件中的数据被读入 DataFrame。
  • 新增一列
    1
    Total

    计算销售额。

  • 删除包含 NaN 的行。
  • 将处理后的数据保存到新文件
    1
    processed_data.xlsx

    中。

4. PDF 文档合并

经常需要将多个 PDF 文件合并成一个文档。借助于

1
PyPDF2

库可以轻松实现该功能。


1
from&nbsp;PyPDF2&nbsp;import&nbsp;PdfFileMerger<br><br>def&nbsp;merge_pdfs(paths,&nbsp;output):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;合并多个&nbsp;PDF&nbsp;文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;paths:&nbsp;PDF&nbsp;文件路径列表<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;output:&nbsp;输出文件路径<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;merger&nbsp;=&nbsp;PdfFileMerger()<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;pdf&nbsp;in&nbsp;paths:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;merger.append(pdf)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;merger.write(output)<br>&nbsp;&nbsp;&nbsp;&nbsp;merger.close()<br><br><em>#&nbsp;示例使用</em><br>pdf_paths&nbsp;=&nbsp;&#091;'report_part1.pdf',&nbsp;'report_part2.pdf',&nbsp;'report_part3.pdf']<br>merge_pdfs(pdf_paths,&nbsp;'complete_report.pdf')

输出结果:

  • 1
    complete_report.pdf

    文件中包含了三个部分的内容。

5. 文本内容替换

在处理大量文本文件时,经常需要批量替换某些内容。Python 的

1
re

模块提供了强大的正则表达式支持,可以轻松完成这一任务。


1
import&nbsp;re<br>import&nbsp;os<br><br>def&nbsp;replace_text_in_files(directory,&nbsp;pattern,&nbsp;replacement):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;在指定目录下的所有文本文件中替换特定内容。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;directory:&nbsp;目录路径<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;pattern:&nbsp;要替换的模式(正则表达式)<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;replacement:&nbsp;替换的内容<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;filename&nbsp;in&nbsp;os.listdir(directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;filename.endswith('.txt'):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filepath&nbsp;=&nbsp;os.path.join(directory,&nbsp;filename)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(filepath,&nbsp;'r')&nbsp;as&nbsp;file:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content&nbsp;=&nbsp;file.read()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updated_content&nbsp;=&nbsp;re.sub(pattern,&nbsp;replacement,&nbsp;content)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(filepath,&nbsp;'w')&nbsp;as&nbsp;file:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.write(updated_content)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"更新文件&nbsp;{filepath}")<br><br><em>#&nbsp;示例使用</em><br>directory&nbsp;=&nbsp;'C:\\Users\\YourName\\Documents\\text_files'<br>pattern&nbsp;=&nbsp;r'old_text'<br>replacement&nbsp;=&nbsp;'new_text'<br>replace_text_in_files(directory,&nbsp;pattern,&nbsp;replacement)

输出结果:


1
更新文件&nbsp;C:\Users\YourName\Documents\text_files\file1.txt<br>更新文件&nbsp;C:\Users\YourName\Documents\text_files\file2.txt

6. 发送邮件自动化

发送邮件是日常工作的一部分。使用

1
smtplib

1
email

库可以自动发送邮件,节省时间和精力。


1
import&nbsp;smtplib<br>from&nbsp;email.mime.text&nbsp;import&nbsp;MIMEText<br>from&nbsp;email.mime.multipart&nbsp;import&nbsp;MIMEMultipart<br><br>def&nbsp;send_email(subject,&nbsp;body,&nbsp;to_emails):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;发送邮件。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;subject:&nbsp;邮件主题<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;body:&nbsp;邮件正文<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;to_emails:&nbsp;收件人邮箱列表<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;sender_email&nbsp;=&nbsp;'your_email@example.com'<br>&nbsp;&nbsp;&nbsp;&nbsp;sender_password&nbsp;=&nbsp;'your_password'<br><br>&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;MIMEMultipart()<br>&nbsp;&nbsp;&nbsp;&nbsp;message&#091;'From']&nbsp;=&nbsp;sender_email<br>&nbsp;&nbsp;&nbsp;&nbsp;message&#091;'To']&nbsp;=&nbsp;',&nbsp;'.join(to_emails)<br>&nbsp;&nbsp;&nbsp;&nbsp;message&#091;'Subject']&nbsp;=&nbsp;subject<br><br>&nbsp;&nbsp;&nbsp;&nbsp;message.attach(MIMEText(body,&nbsp;'plain'))<br><br>&nbsp;&nbsp;&nbsp;&nbsp;try:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;=&nbsp;smtplib.SMTP('smtp.example.com',&nbsp;587)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.starttls()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.login(sender_email,&nbsp;sender_password)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;message.as_string()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.sendmail(sender_email,&nbsp;to_emails,&nbsp;text)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.quit()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("邮件发送成功")<br>&nbsp;&nbsp;&nbsp;&nbsp;except&nbsp;Exception&nbsp;as&nbsp;e:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"邮件发送失败:{e}")<br><br><em>#&nbsp;示例使用</em><br>subject&nbsp;=&nbsp;"本周工作报告"<br>body&nbsp;=&nbsp;"这是本周的工作报告,请查收。"<br>to_emails&nbsp;=&nbsp;&#091;'alice@example.com',&nbsp;'bob@example.com']<br>send_email(subject,&nbsp;body,&nbsp;to_emails)

输出结果:


1
邮件发送成功

7. 数据可视化

数据分析过程中,图表能够帮助更好地理解数据。使用

1
matplotlib

库可以轻松绘制各种图表。


1
import&nbsp;matplotlib.pyplot&nbsp;as&nbsp;plt<br>import&nbsp;pandas&nbsp;as&nbsp;pd<br><br>def&nbsp;plot_data(data,&nbsp;title,&nbsp;x_label,&nbsp;y_label):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;绘制数据图表。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;data:&nbsp;数据&nbsp;DataFrame<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;title:&nbsp;图表标题<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;x_label:&nbsp;X&nbsp;轴标签<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;y_label:&nbsp;Y&nbsp;轴标签<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.figure(figsize=(10,&nbsp;6))<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.plot(data&#091;x_label],&nbsp;data&#091;y_label])<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.title(title)<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.xlabel(x_label)<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.ylabel(y_label)<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.grid(True)<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.show()<br><br><em>#&nbsp;示例使用</em><br>data&nbsp;=&nbsp;pd.DataFrame({<br>&nbsp;&nbsp;&nbsp;&nbsp;'Month':&nbsp;&#091;'Jan',&nbsp;'Feb',&nbsp;'Mar',&nbsp;'Apr',&nbsp;'May',&nbsp;'Jun'],<br>&nbsp;&nbsp;&nbsp;&nbsp;'Sales':&nbsp;&#091;200,&nbsp;250,&nbsp;300,&nbsp;350,&nbsp;400,&nbsp;450]<br>})<br>plot_data(data,&nbsp;'Monthly&nbsp;Sales',&nbsp;'Month',&nbsp;'Sales')

输出结果:

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

8. Excel 数据批量处理

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


1
import&nbsp;pandas&nbsp;as&nbsp;pd<br>import&nbsp;os<br><br>def&nbsp;process_excel_files(directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;批量处理目录下的所有&nbsp;Excel&nbsp;文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;directory:&nbsp;目录路径<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;filename&nbsp;in&nbsp;os.listdir(directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;filename.endswith('.xlsx'):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filepath&nbsp;=&nbsp;os.path.join(directory,&nbsp;filename)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df&nbsp;=&nbsp;pd.read_excel(filepath)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;数据处理</em><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df&#091;'Total']&nbsp;=&nbsp;df&#091;'Quantity']&nbsp;*&nbsp;df&#091;'Price']<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df.dropna(inplace=True)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;保存处理后的数据</em><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output_path&nbsp;=&nbsp;os.path.join(directory,&nbsp;f"processed_{filename}")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df.to_excel(output_path,&nbsp;index=False)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"处理并保存文件&nbsp;{output_path}")<br><br><em>#&nbsp;示例使用</em><br>directory&nbsp;=&nbsp;'C:\\Users\\YourName\\Documents\\sales_data'<br>process_excel_files(directory)

输出结果:


1
处理并保存文件&nbsp;C:\Users\YourName\Documents\sales_data\processed_sales1.xlsx<br>处理并保存文件&nbsp;C:\Users\YourName\Documents\sales_data\processed_sales2.xlsx

9. 自动化生成报告

在定期汇报工作中,自动生成报告可以节省大量时间。使用

1
pandas

1
openpyxl

库可以实现这一目标。


1
import&nbsp;pandas&nbsp;as&nbsp;pd<br>from&nbsp;openpyxl&nbsp;import&nbsp;Workbook<br>from&nbsp;openpyxl.utils.dataframe&nbsp;import&nbsp;dataframe_to_rows<br><br>def&nbsp;generate_report(data,&nbsp;output_path):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;生成&nbsp;Excel&nbsp;报告。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;data:&nbsp;数据&nbsp;DataFrame<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;output_path:&nbsp;输出文件路径<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;wb&nbsp;=&nbsp;Workbook()<br>&nbsp;&nbsp;&nbsp;&nbsp;ws&nbsp;=&nbsp;wb.active<br>&nbsp;&nbsp;&nbsp;&nbsp;ws.title&nbsp;=&nbsp;'Report'<br><br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;r&nbsp;in&nbsp;dataframe_to_rows(data,&nbsp;index=False,&nbsp;header=True):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ws.append(r)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;wb.save(output_path)<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"报告已生成:{output_path}")<br><br><em>#&nbsp;示例使用</em><br>data&nbsp;=&nbsp;pd.DataFrame({<br>&nbsp;&nbsp;&nbsp;&nbsp;'Month':&nbsp;&#091;'Jan',&nbsp;'Feb',&nbsp;'Mar',&nbsp;'Apr',&nbsp;'May',&nbsp;'Jun'],<br>&nbsp;&nbsp;&nbsp;&nbsp;'Sales':&nbsp;&#091;200,&nbsp;250,&nbsp;300,&nbsp;350,&nbsp;400,&nbsp;450]<br>})<br>generate_report(data,&nbsp;'monthly_report.xlsx')

输出结果:


1
报告已生成:monthly_report.xlsx

10. 文件压缩与解压

处理大量文件时,压缩与解压文件可以节省存储空间。使用

1
zipfile

模块可以轻松实现。


1
import&nbsp;zipfile<br>import&nbsp;os<br><br>def&nbsp;compress_files(directory,&nbsp;output_path):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;压缩指定目录下的所有文件。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;directory:&nbsp;目录路径<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;output_path:&nbsp;输出文件路径<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;zipfile.ZipFile(output_path,&nbsp;'w',&nbsp;zipfile.ZIP_DEFLATED)&nbsp;as&nbsp;zipf:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;root,&nbsp;dirs,&nbsp;files&nbsp;in&nbsp;os.walk(directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;file&nbsp;in&nbsp;files:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_path&nbsp;=&nbsp;os.path.join(root,&nbsp;file)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipf.write(file_path,&nbsp;os.path.relpath(file_path,&nbsp;directory))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"压缩文件&nbsp;{file_path}")<br><br><em>#&nbsp;示例使用</em><br>directory&nbsp;=&nbsp;'C:\\Users\\YourName\\Documents\\project_files'<br>output_path&nbsp;=&nbsp;'project_files.zip'<br>compress_files(directory,&nbsp;output_path)

输出结果:


1
压缩文件&nbsp;C:\Users\YourName\Documents\project_files\file1.txt<br>压缩文件&nbsp;C:\Users\YourName\Documents\project_files\file2.txt

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

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


1
import&nbsp;pandas&nbsp;as&nbsp;pd<br>import&nbsp;matplotlib.pyplot&nbsp;as&nbsp;plt<br>from&nbsp;openpyxl&nbsp;import&nbsp;Workbook<br>from&nbsp;openpyxl.utils.dataframe&nbsp;import&nbsp;dataframe_to_rows<br>import&nbsp;zipfile<br>import&nbsp;os<br>import&nbsp;smtplib<br>from&nbsp;email.mime.text&nbsp;import&nbsp;MIMEText<br>from&nbsp;email.mime.multipart&nbsp;import&nbsp;MIMEMultipart<br><br>def&nbsp;process_data(input_directory,&nbsp;output_directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;处理数据并生成报告。<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;input_directory:&nbsp;输入数据目录<br>&nbsp;&nbsp;&nbsp;&nbsp;:param&nbsp;output_directory:&nbsp;输出数据目录<br>&nbsp;&nbsp;&nbsp;&nbsp;"""<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;读取数据</em><br>&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;pd.DataFrame()<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;filename&nbsp;in&nbsp;os.listdir(input_directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;filename.endswith('.xlsx'):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filepath&nbsp;=&nbsp;os.path.join(input_directory,&nbsp;filename)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;df&nbsp;=&nbsp;pd.read_excel(filepath)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;pd.concat(&#091;data,&nbsp;df])<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;数据处理</em><br>&nbsp;&nbsp;&nbsp;&nbsp;data&#091;'Total']&nbsp;=&nbsp;data&#091;'Quantity']&nbsp;*&nbsp;data&#091;'Price']<br>&nbsp;&nbsp;&nbsp;&nbsp;data.dropna(inplace=True)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;保存处理后的数据</em><br>&nbsp;&nbsp;&nbsp;&nbsp;output_path&nbsp;=&nbsp;os.path.join(output_directory,&nbsp;'processed_data.xlsx')<br>&nbsp;&nbsp;&nbsp;&nbsp;data.to_excel(output_path,&nbsp;index=False)<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"处理并保存数据:{output_path}")<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;生成图表</em><br>&nbsp;&nbsp;&nbsp;&nbsp;plt.figure(figsize=(10,&nbsp;6))<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.plot(data&#091;'Date'],&nbsp;data&#091;'Total'])<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.title('Monthly&nbsp;Sales')<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.xlabel('Date')<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.ylabel('Total&nbsp;Sales')<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.grid(True)<br>&nbsp;&nbsp;&nbsp;&nbsp;plt.savefig(os.path.join(output_directory,&nbsp;'sales_chart.png'))<br>&nbsp;&nbsp;&nbsp;&nbsp;print("图表已生成")<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;生成报告</em><br>&nbsp;&nbsp;&nbsp;&nbsp;wb&nbsp;=&nbsp;Workbook()<br>&nbsp;&nbsp;&nbsp;&nbsp;ws&nbsp;=&nbsp;wb.active<br>&nbsp;&nbsp;&nbsp;&nbsp;ws.title&nbsp;=&nbsp;'Report'<br><br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;r&nbsp;in&nbsp;dataframe_to_rows(data,&nbsp;index=False,&nbsp;header=True):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ws.append(r)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;wb.save(os.path.join(output_directory,&nbsp;'monthly_report.xlsx'))<br>&nbsp;&nbsp;&nbsp;&nbsp;print("报告已生成")<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;压缩文件</em><br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;zipfile.ZipFile(os.path.join(output_directory,&nbsp;'monthly_data.zip'),&nbsp;'w',&nbsp;zipfile.ZIP_DEFLATED)&nbsp;as&nbsp;zipf:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;root,&nbsp;dirs,&nbsp;files&nbsp;in&nbsp;os.walk(output_directory):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;file&nbsp;in&nbsp;files:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_path&nbsp;=&nbsp;os.path.join(root,&nbsp;file)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zipf.write(file_path,&nbsp;os.path.relpath(file_path,&nbsp;output_directory))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"压缩文件&nbsp;{file_path}")<br><br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;发送邮件</em><br>&nbsp;&nbsp;&nbsp;&nbsp;sender_email&nbsp;=&nbsp;'your_email@example.com'<br>&nbsp;&nbsp;&nbsp;&nbsp;sender_password&nbsp;=&nbsp;'your_password'<br>&nbsp;&nbsp;&nbsp;&nbsp;to_emails&nbsp;=&nbsp;&#091;'alice@example.com',&nbsp;'bob@example.com']<br><br>&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;MIMEMultipart()<br>&nbsp;&nbsp;&nbsp;&nbsp;message&#091;'From']&nbsp;=&nbsp;sender_email<br>&nbsp;&nbsp;&nbsp;&nbsp;message&#091;'To']&nbsp;=&nbsp;',&nbsp;'.join(to_emails)<br>&nbsp;&nbsp;&nbsp;&nbsp;message&#091;'Subject']&nbsp;=&nbsp;'Monthly&nbsp;Report'<br><br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(os.path.join(output_directory,&nbsp;'monthly_report.xlsx'),&nbsp;'rb')&nbsp;as&nbsp;file:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachment&nbsp;=&nbsp;file.read()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part&nbsp;=&nbsp;MIMEBase('application',&nbsp;'octet-stream')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part.set_payload(attachment)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoders.encode_base64(part)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part.add_header('Content-Disposition',&nbsp;f'attachment;&nbsp;filename=monthly_report.xlsx')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.attach(part)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(os.path.join(output_directory,&nbsp;'sales_chart.png'),&nbsp;'rb')&nbsp;as&nbsp;file:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachment&nbsp;=&nbsp;file.read()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part&nbsp;=&nbsp;MIMEBase('application',&nbsp;'octet-stream')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part.set_payload(attachment)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encoders.encode_base64(part)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;part.add_header('Content-Disposition',&nbsp;f'attachment;&nbsp;filename=sales_chart.png')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.attach(part)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;try:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;=&nbsp;smtplib.SMTP('smtp.example.com',&nbsp;587)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.starttls()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.login(sender_email,&nbsp;sender_password)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;message.as_string()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.sendmail(sender_email,&nbsp;to_emails,&nbsp;text)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.quit()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("邮件发送成功")<br>&nbsp;&nbsp;&nbsp;&nbsp;except&nbsp;Exception&nbsp;as&nbsp;e:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(f"邮件发送失败:{e}")<br><br><em>#&nbsp;示例使用</em><br>input_directory&nbsp;=&nbsp;'C:\\Users\\YourName\\Documents\\sales_data'<br>output_directory&nbsp;=&nbsp;'C:\\Users\\YourName\\Documents\\reports'<br>process_data(input_directory,&nbsp;output_directory)

输出结果:


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

总结

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

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索