无论是数据清洗,收集数据,还是测试模型性能,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 和自动化脚本,你可以:
- 批量扫描特定目录中的日报文件。
- 根据日期、文件名称或其他规则将文件移动到指定的归档目录中。
- 如果文件已经归档,则自动跳过或更新归档记录。
案例流程:
- 扫描文件夹:使用
os.listdir()遍历所有日报文件。 - 匹配日期格式:判断文件名中是否包含日期信息(例如:
2025-01-01_report.txt)。 - 移动文件:使用
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 生成,可能存在错误,请注意甄别。
