讲师中心 微信公众号
AI工具推荐 视频效率加速

Task Automation Workflows

Polar Sponsor
爱发电 赞助
.NET 9.0

使用脚本、工作流和定时任务自动化重复性任务,创建高效的文件操作、数据处理、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工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

相关专题

更多
Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

0

2026.11.03

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

0

2026.11.03

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

0

2026.11.03

码上飞入口地址合集
码上飞入口地址合集

本专题汇总了码上飞(CodeFlying)的官方入口地址合集,涵盖官网主站及网页版在线使用入口,支持注册登录后直接在线体验零代码AI应用生成。同时整理了APP端下载渠道与小程序入口,助你快速访问平台,通过自然语言描述需求即可生成应用、小程序或网站。

0

2026.11.03

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

0

2026.11.02

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

0

2026.10.28

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

0

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn