青岛seo关键词,做网站建设优化的公司,推广软件是什么,个人网站制作的主要内容文章目录 Python实现下载监控工具#xff1a;自动检测并移动下载文件背景介绍工具功能核心代码解析初始化配置监控启动方法文件检测方法文件移动方法 使用示例总结 Python实现下载监控工具#xff1a;自动检测并移动下载文件
背景介绍
在日常开发和自动化任务中#xff0c… 文章目录 Python实现下载监控工具自动检测并移动下载文件背景介绍工具功能核心代码解析初始化配置监控启动方法文件检测方法文件移动方法 使用示例总结 Python实现下载监控工具自动检测并移动下载文件
背景介绍
在日常开发和自动化任务中经常需要处理文件下载的场景。无论是网页自动化测试、爬虫抓取数据还是自动备份文件都需要一个可靠的方式来监控下载目录并在文件下载完成后进行后续处理。本文介绍一个实用的Python下载监控工具类能够自动检测新下载的文件并将其移动到指定位置。
工具功能
这个Downloader类提供以下核心功能
监控下载目录实时检测指定目录中新出现的文件忽略临时文件自动过滤浏览器下载过程中的临时文件如.crdownload, .tmp文件移动与备份将下载完成的文件移动到目标位置支持备份或覆盖现有文件超时控制设置合理的等待时间避免无限期阻塞
核心代码解析
初始化配置
class Downloader():def __init__(self, download_dir, time_out60, poll_frequency0.5, exist_delTrue, ignore_suffix_listNone):# 下载目录self.download_dir download_dirself.time_out time_out # 超时时间秒self.poll_frequency poll_frequency # 轮询间隔秒self.exist_del exist_del # 目标文件存在时是否删除# 忽略的临时文件后缀self.ignore_suffix_list ignore_suffix_list or [.crdownload, .tmp]监控启动方法 def watch_start(self):记录下载前的文件状态path Path(self.download_dir)files set(path.glob(*))self.path pathself.origin_files files文件检测方法 def get_download_file(self):检测新下载的文件start_time perf_counter()while (perf_counter() - start_time self.time_out):now_files set(self.path.glob(*))# 计算新增文件diff_list list(now_files.difference(self.origin_files))if not diff_list:sleep(self.poll_frequency)continue# 过滤临时文件final_diff_list []for item in diff_list:if Path(item).suffix not in self.ignore_suffix_list:final_diff_list.append(item)# 处理有效文件if final_diff_list:if len(final_diff_list) 1:raise Exception(暂不支持监控多个文件下载)return str(Path(final_diff_list[0]).resolve())return None文件移动方法 def download_file(self, file_path):移动下载的文件到指定位置download_file self.get_download_file()if download_file is None:raise Exception(下载超时未获取到文件)log.info(f找到文件 {download_file}, 开始移动)target Path(file_path)# 处理目标文件已存在的情况if target.exists():if self.exist_del:target.unlink() # 删除现有文件else:# 创建带时间戳的备份文件suffix target.suffixtimestamp datetime.now().strftime(%Y%m%d%H%M%S)backup_path target.with_name(f{target.stem}_{timestamp}_bak{suffix})shutil.move(file_path, backup_path)# 移动文件到目标位置shutil.move(download_file, file_path)使用示例
if __name__ __main__:log.basicConfig(levellog.INFO)# 初始化下载监控器downloader Downloader(download_dirrC:\Users\user\Downloads, # 监控的下载目录time_out120, # 超时时间2分钟poll_frequency0.2, # 每0.2秒检查一次exist_delFalse # 目标文件存在时创建备份)# 开始监控downloader.watch_start()# 这里应该触发下载操作例如点击下载链接# 示例使用Selenium下载文件# driver.find_element(By.ID, downloadButton).click()try:# 获取并移动下载的文件downloader.download_file(rD:\project\data\report.xlsx)log.info(文件下载并移动成功)except Exception as e:log.error(f下载失败: {str(e)})总结
本文介绍的下载监控工具提供了一个简单而强大的解决方案用于自动化处理文件下载任务。通过合理设置超时时间、轮询频率和临时文件过滤规则可以适应各种下载场景。工具的核心思路是通过比较目录快照的变化来检测新文件然后进行后续处理。
这个工具类具有以下优势
轻量级不依赖外部库标准库实现可配置灵活的参数设置适应不同需求健壮性完善的错误处理和超时机制易集成可以轻松集成到现有自动化流程中
希望这个工具能为你的自动化任务带来便利完整代码已在文章开头提供欢迎直接使用和扩展。