使用脚本、工作流和定时任务自动化重复性任务,创建高效的文件操作、数据处理、API调用和定时任务自动化...
任务自动化
功能概述
任务自动化是一项面向实际任务的技能,主要用于将重复的工作转换为自动化工作流程;. 保存时间, 减少错误, 缩放操作;
核心要点
- 批次重命名 : 批次转换 : 重置文件 : 组织文件 :.;
- Data 进程。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
使用与执行
使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
结果检查与注意事项
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
任务自动化
将重复性工作转化为自动化工作流,节省时间、减少错误、提升运营规模。
自动化类型
1. 文件操作
批量重命名:
import os
import re
def batch_rename(directory, pattern, replacement):
"""重命名匹配正则模式的文件"""
for filename in os.listdir(directory):
if re.match(pattern, filename):
new_name = re.sub(pattern, replacement, filename)
os.rename(
os.path.join(directory, filename),
os.path.join(directory, new_name)
)
print(f"已重命名: {filename} -> {new_name}")
批量格式转换:
from PIL import Image
import os
def convert_images(input_dir, output_dir, format='webp'):
"""将所有图像转换为指定格式"""
os.makedirs(output_dir, exist_ok=True)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
img = Image.open(os.path.join(input_dir, filename))
name = os.path.splitext(filename)[0]
img.save(os.path.join(output_dir, f"{name}.{format}"), format.upper())
print(f"已转换: {filename}")
文件归类整理:
import os
import shutil
def organize_by_type(directory):
"""按文件类型将文件移入对应文件夹"""
extensions = {
'images': ['.jpg', '.jpeg', '.png', '.gif', '.webp'],
'documents': ['.pdf', '.doc', '.docx', '.txt', '.md'],
'videos': ['.mp4', '.mov', '.avi', '.mkv'],
'audio': ['.mp3', '.wav', '.flac'],
'code': ['.py', '.js', '.ts', '.go', '.rs'],
}
for filename in os.listdir(directory):
filepath = os.path.join(directory, filename)
if os.path.isfile(filepath):
ext = os.path.splitext(filename)[1].lower()
for folder, exts in extensions.items():
if ext in exts:
target = os.path.join(directory, folder)
os.makedirs(target, exist_ok=True)
shutil.move(filepath, os.path.join(target, filename))
print(f"已将 {filename} 移至 {folder}/")
break
2. 数据处理
批量数据转换:
import pandas as pd
def process_csv_batch(input_dir, output_file, transform_func):
"""批量处理多个 CSV 文件并合并输出"""
dfs = []
for filename in os.listdir(input_dir):
if filename.endswith('.csv'):
df = pd.read_csv(os.path.join(input_dir, filename))
df = transform_func(df)
dfs.append(df)
combined = pd.concat(dfs, ignore_index=True)
combined.to_csv(output_file, index=False)
print(f"已将 {len(dfs)} 个文件处理并合并为 {output_file}")
数据流水线:
def create_pipeline(steps):
"""创建可复用的数据流水线"""
def pipeline(data):
result = data
for step in steps:
result = step(result)
return result
return pipeline
# 示例用法:
pipeline = create_pipeline([
lambda x: x.dropna(),
lambda x: x.drop_duplicates(),
lambda x: x[x['value'] > 0],
lambda x: x.sort_values('date')
])
clean_data = pipeline(raw_data)
3. API 操作
限速 API 客户端:
import time
from functools import wraps
def rate_limit(calls_per_second=2):
"""用于限制 API 调用频率的装饰器"""
min_interval = 1.0 / calls_per_second
last_call = [0.0]
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
elapsed = time.time() - last_call[0]
if elapsed < min_interval:
time.sleep(min_interval - elapsed)
last_call[0] = time.time()
return func(*args, **kwargs)
return wrapper
return decorator
@rate_limit(2) # 每秒最多调用 2 次
def api_call(endpoint, data):
return requests.post(endpoint, json=data)
批量 API 调用:
def batch_api_calls(items, endpoint, batch_size=100):
"""以批次方式执行 API 调用"""
results = []
for i in range(0, len(items), batch_size):
batch = items[i:i + batch_size]
# 执行批次请求
response = requests.post(endpoint, json={'items': batch})
if response.status_code == 200:
results.extend(response.json())
else:
print(f"第 {i//batch_size} 批次失败: {response.status_code}")
time.sleep(1) # 实施速率限制
return results
指数退避重试:
import time
import random
def retry_with_backoff(func, max_retries=3, base_delay=1):
"""对失败调用采用指数退避策略进行重试"""
for attempt in range(max_retries):
try:
return func()
except Exception as e:
if attempt == max_retries - 1:
raise
delay = base_delay * (2 ** attempt) + random.random()
print(f"第 {attempt + 1}/{max_retries} 次重试,{delay:.1f} 秒后执行: {e}")
time.sleep(delay)
4. 定时任务
Cron 作业:
# 每小时执行一次 0 * * * * /path/to/script.sh # 每天上午 9 点执行 0 9 * * * /path/to/script.sh # 每周一上午 9 点执行 0 9 * * 1 /path/to/script.sh # 工作日(周一至周五)每小时执行一次 0 * * * 1-5 /path/to/script.sh
Python 调度器:
import schedule
import time
def job():
print("正在运行定时任务...")
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("09:00").do(job)
schedule.every().monday.do(job)
while True:
schedule.run_pending()
time.sleep(60)
OpenClaw Cron:
openclaw cron add --name "Daily Report" --schedule "0 9 * * *" --task "Generate daily report and send to slack"
工作流模式
顺序流水线
def sequential_workflow(steps):
"""按顺序执行各步骤"""
results = []
for i, step in enumerate(steps):
try:
result = step['action'](**step.get('params', {}))
results.append({'step': i, 'status': 'success', 'result': result})
except Exception as e:
results.append({'step': i, 'status': 'error', 'error': str(e)})
if step.get('stop_on_error', True):
break
return results
并行执行
from concurrent.futures import ThreadPoolExecutor, as_completed
def parallel_workflow(tasks, max_workers=5):
"""并行执行任务"""
results = []
with ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = {executor.submit(task['action'], **task.get('params', {})): task
for task in tasks}
for future in as_completed(futures):
task = futures[future]
try:
result = future.result()
results.append({'task': task['name'], 'status': 'success', 'result': result})
except Exception as e:
results.append({'task': task['name'], 'status': 'error', 'error': str(e)})
return results
条件工作流
def conditional_workflow(steps):
"""根据条件决定是否执行步骤"""
context = {}
for step in steps:
# 检查条件
if 'condition' in step:
if not step['condition'](context):
print(f"跳过 {step['name']}:条件不满足")
continue
# 执行步骤
result = step['action'](**step.get('params', {}), context=context)
context[step['name']] = result
return context
错误处理
优雅降级
def robust_operation(data, fallback=None):
"""尝试主操作,失败时启用备用方案"""
try:
return primary_operation(data)
except SpecificError as e:
print(f"主操作失败: {e},尝试备用方案")
return fallback_operation(data) if fallback else None
except Exception as e:
print(f"所有方案均失败: {e}")
return fallback
错误通知
def notify_on_error(func, notify_func):
"""出错时触发通知的装饰器"""
@wraps(func)
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
notify_func(f"函数 {func.__name__} 执行出错: {e}")
raise
return wrapper
@notify_on_error(send_slack_message)
def important_operation():
# ...
监控
进度追踪
from tqdm import tqdm
def process_with_progress(items):
"""带进度条处理数据项"""
results = []
for item in tqdm(items, desc="Processing"):
results.append(process(item))
return results
日志记录
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
filename='automation.log'
)
logger = logging.getLogger(__name__)
def logged_operation(data):
logger.info(f"开始执行操作,输入数据共 {len(data)} 条")
try:
result = process(data)
logger.info(f"操作完成,共生成 {len(result)} 条结果")
return result
except Exception as e:
logger.error(f"操作失败: {e}")
raise
最佳实践
1. 从简单开始
手动 → 脚本 → 定时执行 → 监控告警
避免过度设计。先从手动流程入手,再逐步实现自动化。
2. 保证幂等性
def safe_operation(data):
"""可安全多次执行的操作"""
# 检查是否已处理
if already_processed(data):
return get_cached_result(data)
# 执行处理
result = process(data)
# 标记为已完成
mark_processed(data)
return result
3. 添加检查点
def long_running_workflow(data):
"""在关键节点保存执行进度"""
checkpoint_file = "workflow_checkpoint.json"
# 若检查点存在,则加载
if os.path.exists(checkpoint_file):
with open(checkpoint_file) as f:
state = json.load(f)
start_from = state['step']
data = state['data']
else:
start_from = 0
# 带检查点执行流程
for i, step in enumerate(steps[start_from:], start=start_from):
result = step(data)
# 保存检查点
with open(checkpoint_file, 'w') as f:
json.dump({'step': i + 1, 'data': result}, f)
# 清理检查点文件
os.remove(checkpoint_file)
return result
4. 充分测试
def test_automation():
"""使用模拟数据测试自动化逻辑"""
test_data = create_mock_data()
# 预演执行(dry run)
result = automation(test_data, dry_run=True)
# 验证结果
assert result['status'] == 'success'
assert len(result['output']) == expected_count
print("所有测试通过!")
5. 全面文档化
def automated_task(config):
"""
处理每日销售数据并生成报告。
参数:
config: 字典,包含以下键:
- input_dir: 存放 CSV 文件的目录路径
- output_file: 输出报告的文件路径
- notify: 完成后发送通知的邮箱地址
返回值:
字典,包含以下键:
- status: 'success' 或 'error'
- records_processed: 已处理记录数
- output_file: 生成报告的文件路径
示例:
result = automated_task({
'input_dir': '/data/sales',
'output_file': '/reports/daily.csv',
'notify': 'team@company.com'
})
"""
# 实现逻辑...
常见应用场景
每日报告自动化
def daily_report():
# 1. 获取数据
data = fetch_from_sources()
# 2. 数据处理
processed = process_data(data)
# 3. 生成报告
report = generate_report(processed)
# 4. 分发报告
send_email(report)
upload_to_slack(report)
# 5. 存档报告
archive_report(report)
数据同步
def sync_data():
# 1. 获取上次同步状态
last_sync = get_last_sync_time()
# 2. 获取自上次同步以来的变更
changes = fetch_changes_since(last_sync)
# 3. 应用变更
for change in changes:
apply_change(change)
# 4. 更新同步状态
update_sync_time()
清理自动化
def cleanup():
# 1. 删除旧文件
remove_old_files(days=30)
# 2. 清空临时目录
clear_temp_dirs()
# 3. 归档旧日志
archive_logs()
# 4. 优化数据库
optimize_database()
热门AI工具
相关专题
用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。
0
2026.11.03
Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。
0
2026.11.03
Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。
0
2026.11.03
本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。
0
2026.11.03
本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。
0
2026.11.02
本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。
0
2026.11.02
本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。
0
2026.11.02
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.7万人学习
共6课时 | 54.7万人学习
最新文章