基础自动化技能

无论是数据清洗,收集数据,还是测试模型性能,AI产品经理经常会面对大量重复性任务和繁琐的数据处理,这时候我们就可以用Python来进行自动化处理。这里所谓的“自动化”是指:利用Python脚本或程序来自动执行那些通常需要手动操作的重复性任务或流程。它可以自动执行许多重复工作,如文件操作、数据处理、网络请求、任务调度、系统监控等,从而大幅提升工作效率,让我们有更多时间进行思考和决策。掌握了Python自动化流程与任务管理,我们就可以在工作中如鱼得水,事半功倍。

自动化技能的重要性:

  • 提高效率:自动化脚本可以替代手动操作,减少错误并节省时间。
  • 降低成本:自动化可以减少重复劳动,降低企业运营成本。
  • 优化流程:通过自动化流程,可以使数据处理、文件归档等任务更加规范化和系统化。

在日常工作中,管理和整理大量文件可能非常耗时。我们可以利用 Python 的 `os` 和 `shutil` 模块,自动完成文件的归档、复制、移动甚至压缩操作,从而提高工作效率。

我们在之前的课程中已经知道: os 是Python标准库中的一个模块,可以用来对文件和目录进行最基本操作。它提供了与操作系统交互的功能。常见操作包括:

  • 查看目录内容:使用 `os.listdir(path)` 获取目录中的所有文件和文件夹。
  • 创建和删除目录:使用 `os.mkdir(path)` 创建目录,使用 `os.rmdir(path)` 删除空目录。
  • 文件路径操作:使用 `os.path` 模块处理文件路径,例如 `os.path.join()` 来拼接路径,`os.path.exists()` 检查路径是否存在。

下面是一个示例代码:

python
import os

# 获取当前目录下的所有文件和文件夹
current_files = os.listdir('.')
print("当前目录下的文件和文件夹:", current_files)

# 创建一个新的文件夹
folder_name = 'archive'
if not os.path.exists(folder_name):
    os.mkdir(folder_name)
    print(f"文件夹 '{folder_name}' 创建成功。")
else:
    print(f"文件夹 '{folder_name}' 已经存在。")

而另一个官方标准库 shutil 模块,则侧重于文件的更高级操作,提供文件的复制、移动、删除、压缩等功能,例如:

  • 复制文件和目录:使用 shutil.copy()shutil.copytree()
  • 移动文件和目录:使用 shutil.move()
  • 删除文件和目录:使用 shutil.rmtree() 删除整个目录树。

下面是 shutil 的一个示例代码:

import shutil

# 复制一个文件到目标目录
source_file = 'daily_report.txt'
destination_folder = 'archive'

if os.path.exists(source_file) and os.path.exists(destination_folder):
    shutil.copy(source_file, destination_folder)
    print(f"文件 '{source_file}' 已成功复制到 '{destination_folder}'。")
else:
    print("文件或目标文件夹不存在。")

下面我们来看一个工作中可能遇到的案例:

在实际工作中,每天生成的日报需要归档保存。利用 Python 和自动化脚本,你可以:

  • 批量扫描特定目录中的日报文件。
  • 根据日期、文件名称或其他规则将文件移动到指定的归档目录中。
  • 如果文件已经归档,则自动跳过或更新归档记录。

案例流程:

  1. 扫描文件夹:使用 os.listdir() 遍历所有日报文件。
  2. 匹配日期格式:判断文件名中是否包含日期信息(例如:2025-01-01_report.txt)。
  3. 移动文件:使用 shutil.move() 将匹配到的文件移动到归档目录中。

提示词示例:

提示词:

请编写一个Python脚本,遍历当前目录下所有以“_report.txt”结尾的文件, 并根据文件名中的日期信息,将文件移动到名为“archive/YYYY-MM-DD”的文件夹中, 如果目标文件夹不存在则请先创建它。

示例代码:

import os      # 用于文件和目录操作
import shutil  # 用于文件的复制、移动等操作
import re      # 用于正则表达式匹配日期格式

# 当前目录路径(你也可以修改为其他需要扫描的目录)
current_dir = '.'

# 定义归档根目录
archive_root = 'archive'

# 使用正则表达式匹配文件名中的日期格式:YYYY-MM-DD
date_pattern = re.compile(r'(\d{4}-\d{2}-\d{2})_report\.txt$')

# 遍历当前目录下的所有文件
for filename in os.listdir(current_dir):
    # 判断文件名是否以"_report.txt"结尾
    if filename.endswith('_report.txt'):
        # 尝试从文件名中提取日期信息
        match = date_pattern.search(filename)
        if match:
            # 获取提取到的日期字符串
            date_str = match.group(1)
            # 构建目标归档目录路径:archive/YYYY-MM-DD
            target_dir = os.path.join(archive_root, date_str)
            # 如果目标目录不存在,则创建它
            if not os.path.exists(target_dir):
                os.makedirs(target_dir)
                print(f"创建目录: {target_dir}")
            # 构建源文件和目标文件的完整路径
            source_file = os.path.join(current_dir, filename)
            target_file = os.path.join(target_dir, filename)
            try:
                # 将文件移动到目标归档目录
                shutil.move(source_file, target_file)
                print(f"已移动文件 {filename} 到 {target_dir}")
            except Exception as e:
                print(f"移动文件 {filename} 时出错: {e}")
        else:
            # 如果文件名中不包含日期信息,则跳过或记录日志
            print(f"文件 {filename} 不符合归档格式,已跳过。")

代码说明:

  • os.listdir():遍历当前目录下所有文件。
  • 正则表达式:用于匹配文件名中符合YYYY-MM-DD_report.txt格式的日期信息。
  • os.makedirs():递归创建目录(当目标文件夹不存在时创建)。
  • shutil.move():移动文件到目标目录。
  • 异常处理:捕获移动文件过程中可能出现的错误,并输出提示信息。

在实际工作过程中,我们有时候会碰到这样一种情况,许多临时文件可能会占用了大量空间。用Python 自动清理临时文件可以帮助保持硬盘整洁。操作步骤如下:

  • 识别临时文件:如后缀为 .tmp 或特定命名前缀的文件。
  • 删除文件:使用 os.remove() 删除不再需要的文件。
  • 定期清理:可以设置脚本在特定时间间隔内运行,自动清理旧文件。

提示词示例:

提示词:

请编写一个Python脚本,扫描指定目录下所有后缀为“.tmp”的临时文件, 并删除所有超过7天未修改的临时文件。若文件正在被使用,则跳过删除。

示例代码:

import os      # 用于文件和目录操作
import time    # 用于获取当前时间和时间计算

# 指定要扫描的目录(可根据需要修改路径)
target_dir = '.'

# 定义临时文件后缀
tmp_extension = '.tmp'

# 定义文件保留天数(7天)
days_to_keep = 7

# 获取当前时间的时间戳
current_time = time.time()

# 计算保留时间的秒数
seconds_to_keep = days_to_keep * 24 * 3600

# 遍历指定目录下的所有文件
for filename in os.listdir(target_dir):
    # 检查文件是否以“.tmp”结尾
    if filename.endswith(tmp_extension):
        file_path = os.path.join(target_dir, filename)
        # 获取文件的最后修改时间
        file_mod_time = os.path.getmtime(file_path)
        # 计算文件从最后修改到现在的时间差
        time_diff = current_time - file_mod_time
        # 判断文件是否超过保留时间
        if time_diff > seconds_to_keep:
            try:
                # 尝试删除文件
                os.remove(file_path)
                print(f"已删除文件: {filename}")
            except Exception as e:
                # 如果删除出错(例如文件正在使用),则跳过并记录提示
                print(f"删除文件 {filename} 时出错: {e}")
        else:
            print(f"文件 {filename} 最近已修改,不满足删除条件。")

代码说明:

  • os.listdir():遍历指定目录下所有文件。
  • os.path.getmtime():获取文件的最后修改时间。
  • time.time():获取当前的时间戳,用于计算时间差。
  • os.remove():删除指定文件。
  • 异常处理:捕获删除过程中可能出现的错误(如文件被占用),并输出提示信息。

练习:

1、现在请您结合前面所学知识,实现一个自动归档与清理系统。具体要求:

  • 任务描述:系统需自动归档日报文件并清理7天前的临时文件。
  • 要求
    • 能够识别文件名中的日期信息并按日期归档。
    • 自动判断临时文件的最后修改时间,并删除不再需要的文件。
    • 代码中包含基本的错误处理和日志记录。
  • 提示:你可以先用简单提示词让 AI 生成初始代码,再逐步修改调试使代码满足所有要求。

2、请设计提示词,修改课程中的示例代码,完成下面2项任务:

  • 在已有的批量归档日报代码中,增加对文件是否已经归档的判断,避免重复归档。也就是说,当目标归档目录中已存在相同文件时,不再重复移动或归档该文件。
  • 在已有的自动清理临时文件代码中,增加对文件是否正在被使用的判断,避免误删正在使用的临时文件。你可以通过捕获删除操作时的异常或利用系统锁定机制进行判断。即:在删除文件之前,尝试以独占方式打开文件(或其他检测方法)判断文件是否正在被使用。如果文件被占用,则跳过删除并输出提示信息;如果文件未被使用,则继续删除操作。

AI 助教

提示:您可在此提出学习中遇到的问题。回答由 AI 生成,可能存在错误,请注意甄别。