一、文件管理自动化:从混乱到有序
1. 文件分类归档系统
在处理大量文件时,手动分类既耗时又易出错。以下脚本通过分析文件扩展名自动创建子目录并完成归档:
import osimport shutildef organize_files(source_dir):extensions = {'images': ['.jpg', '.png', '.gif'],'documents': ['.pdf', '.docx', '.txt'],'archives': ['.zip', '.rar']}for filename in os.listdir(source_dir):file_path = os.path.join(source_dir, filename)if os.path.isfile(file_path):for category, ext_list in extensions.items():if any(filename.lower().endswith(ext) for ext in ext_list):dest_dir = os.path.join(source_dir, category)os.makedirs(dest_dir, exist_ok=True)shutil.move(file_path, os.path.join(dest_dir, filename))break
应用场景:适用于整理下载文件夹、项目交付物归档等场景,支持自定义扩展名映射规则。
2. 空文件夹清理工具
数据迁移后常产生大量空文件夹,该脚本递归扫描并删除空目录:
def remove_empty_folders(path):if not os.path.isdir(path):return Falsefor item in os.listdir(path):item_path = os.path.join(path, item)if os.path.isdir(item_path):remove_empty_folders(item_path)if not os.listdir(path):os.rmdir(path)return Truereturn False
优化建议:可添加日志记录功能,记录被删除的文件夹路径以便审计。
二、网络数据采集与处理
3. 批量图片下载器
从网页批量下载图片时,需处理URL解析、异常捕获等复杂逻辑:
import requestsfrom bs4 import BeautifulSoupimport urllib.parsedef download_images(url, output_folder):headers = {'User-Agent': 'Mozilla/5.0'}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')for img_tag in soup.find_all('img'):img_url = img_tag.get('src')if img_url:full_url = urllib.parse.urljoin(url, img_url)try:img_data = requests.get(full_url).contentfilename = os.path.join(output_folder, os.path.basename(img_url))with open(filename, 'wb') as f:f.write(img_data)except Exception as e:print(f"Failed to download {full_url}: {e}")
进阶功能:可添加多线程下载、图片格式转换等增强功能。
4. 表单自动提交系统
自动化测试或数据录入场景中,需模拟用户提交表单:
def submit_form(url, form_data):session = requests.Session()response = session.post(url, data=form_data)if response.status_code == 200:print("Form submitted successfully")# 可添加响应内容解析逻辑else:print(f"Submission failed with status {response.status_code}")# 使用示例form_data = {'username': 'test_user','password': 'secure_password123'}submit_form('https://example.com/login', form_data)
安全提示:敏感数据应使用环境变量或加密存储,避免硬编码在脚本中。
三、文本与数据处理
5. 智能文件重命名工具
支持正则表达式匹配的批量重命名方案:
import reimport osdef batch_rename(directory, pattern, replacement):for filename in os.listdir(directory):new_name = re.sub(pattern, replacement, filename)if new_name != filename:src = os.path.join(directory, filename)dst = os.path.join(directory, new_name)os.rename(src, dst)print(f"Renamed {filename} to {new_name}")# 使用示例:将所有.txt文件中的"report"替换为"summary"batch_rename('./documents', r'report(?=\.txt$)', 'summary')
扩展功能:可添加文件过滤条件、预览模式等安全机制。
6. 文本分析仪表盘
结合Pandas和Matplotlib实现快速文本分析:
import pandas as pdimport matplotlib.pyplot as pltdef analyze_text(file_path):with open(file_path, 'r', encoding='utf-8') as f:text = f.read()# 词频统计words = text.lower().split()word_counts = pd.Series(words).value_counts().head(10)# 可视化展示plt.figure(figsize=(10, 5))word_counts.plot(kind='bar')plt.title('Top 10 Most Frequent Words')plt.ylabel('Frequency')plt.show()return word_counts
应用场景:适用于合同审查、学术论文分析等场景,可扩展为情感分析等高级功能。
四、系统运维自动化
7. 定时任务管理系统
通过Python实现跨平台的定时任务调度:
import scheduleimport timefrom datetime import datetimedef job():print(f"Task executed at {datetime.now()}")# 设置每天10:30执行schedule.every().day.at("10:30").do(job)while True:schedule.run_pending()time.sleep(60)
生产环境建议:在Linux环境中建议使用crontab,Windows环境使用任务计划程序,该脚本更适合临时调试场景。
8. 日志文件监控系统
实时监控日志文件变化并触发告警:
import timefrom watchdog.observers import Observerfrom watchdog.events import FileSystemEventHandlerclass LogHandler(FileSystemEventHandler):def on_modified(self, event):if event.src_path.endswith('.log'):print(f"Log file changed: {event.src_path}")# 可添加异常检测逻辑observer = Observer()observer.schedule(LogHandler(), path='./logs', recursive=False)observer.start()try:while True:time.sleep(1)except KeyboardInterrupt:observer.stop()observer.join()
依赖安装:需先安装watchdog库(pip install watchdog)
五、进阶应用场景
9. Excel数据清洗流水线
结合OpenPyXL实现复杂数据转换:
from openpyxl import load_workbookdef clean_excel(input_path, output_path):wb = load_workbook(input_path)ws = wb.activefor row in ws.iter_rows(min_row=2): # 跳过标题行# 示例:将价格列转换为浮点数if row[2].value and isinstance(row[2].value, str):try:row[2].value = float(row[2].value.replace('$', ''))except ValueError:row[2].value = 0.0wb.save(output_path)
性能优化:处理大型文件时建议使用Pandas的read_excel()函数。
10. 自然语言处理基础
使用NLTK实现简单的文本分类:
import nltkfrom nltk.corpus import movie_reviewsfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.naive_bayes import MultinomialNB# 准备数据集documents = [(list(movie_reviews.words(fileid)), category)for category in movie_reviews.categories()for fileid in movie_reviews.fileids(category)]texts = [' '.join(words) for words, category in documents]labels = [category for words, category in documents]# 特征提取与模型训练vectorizer = TfidfVectorizer()X = vectorizer.fit_transform(texts)model = MultinomialNB().fit(X, labels)# 预测示例new_text = ["This movie was fantastic"]X_new = vectorizer.transform(new_text)print(model.predict(X_new)) # 输出预测类别
环境准备:需先下载NLTK数据集(nltk.download('movie_reviews'))
六、最佳实践建议
- 异常处理:所有网络请求和文件操作都应添加try-catch块
- 日志记录:使用Python标准库logging模块记录操作轨迹
- 配置管理:将敏感参数存储在环境变量或配置文件中
- 单元测试:为关键功能编写pytest测试用例
- 性能优化:大数据量处理时考虑使用多进程/多线程
这些案例覆盖了从基础文件操作到高级数据分析的典型办公场景,开发者可根据实际需求进行组合创新。建议将常用功能封装为CLI工具或Web服务,进一步提升复用价值。