Python批量下载API附件时如何跳过已存在文件夹避免程序卡住
故障原因
原代码运行卡住是因为os.makedirs()默认行为是目标路径已存在时抛出FileExistsError,代码没有做前置校验或异常捕获,直接触发中断。另外原代码用字符串硬拼路径、反复切换工作目录的写法也容易触发额外的路径类错误。
修复后代码
在循环入口增加目标文件夹存在性校验,已存在则直接跳过当前条目进入下一轮循环,同时优化路径处理逻辑避免兼容问题,完整代码如下:
import pandas as pd import os import zipfile parent_directory = "folderpath" csv_file_dir = "myfilepath.csv" user = "API_username" key = "API_password" # 统一处理父目录路径格式,避免拼接错误 if not parent_directory.endswith(os.sep): parent_directory += os.sep bdr_data = pd.read_csv(csv_file_dir) api_prefix = "… " + user + ":" + key + "…" for _, row in bdr_data.iterrows(): ref_num = str(row['Ref_Num']) target_folder = os.path.join(parent_directory, ref_num) # 核心逻辑:目标文件夹已存在则直接跳过 if os.path.isdir(target_folder): continue # 仅对不存在的文件夹执行创建、下载操作 os.makedirs(target_folder) save_path = os.path.join(target_folder, "attachments.zip") download_cmd = f"{api_prefix}{row['url_attachment']} -o {save_path}" os.system(download_cmd)
修改说明
- 新增前置校验:通过
os.path.isdir()直接判断目标路径是否为已存在的目录,命中则执行continue跳过后续所有操作,进入下一条数据处理 - 替换原字符串硬拼接路径的写法为
os.path.join(),自动适配不同操作系统的路径分隔符,避免漏写斜杠导致的路径错误 - 移除原代码中反复
os.chdir()切换工作目录的逻辑,直接在下载命令中指定附件保存的完整路径,减少目录切换带来的异常风险 - 统一处理父目录的末尾分隔符,兼容用户输入的不同路径格式
可选优化:如果需要支持文件夹存在但附件下载不全的场景,可以把判断条件改为校验目标文件夹下是否存在完整的
attachments.zip文件,而非判断文件夹存在就跳过。
内容的提问来源于stack exchange,提问作者Rovshan Aliyev
相关产品推荐
相关产品推荐

