如何将PDF下载至以表单名命名的子目录而非主应用同级目录
解决方案
首先引入Python标准库os处理目录与路径,修改后代码如下:
完整修改代码
# 代码顶部引入依赖 import os import requests # ----- 你原有其他逻辑保持不变 ----- pdf_link = form_number.find("a") i += 1 print("Downloading file: ", i) # 构造子目录名称 form_name = form_number.text.strip() # 自动创建子目录,目录已存在时不报错 os.makedirs(form_name, exist_ok=True) # 拼接符合要求的完整存储路径 pdf_file_name = f"{form_name} {form_year.text.strip()}.pdf" full_save_path = os.path.join(form_name, pdf_file_name) # 下载并保存文件 response = requests.get(pdf_link.get('href')) # 使用with上下文管理器操作文件,自动处理资源释放 with open(full_save_path, 'wb') as pdf: pdf.write(response.content) print("File ", i, " downloaded")
改动说明
- 新增目录自动创建逻辑:自动生成以表单名称命名的子目录,无需手动提前创建
- 跨平台兼容:使用
os.path.join拼接路径,自动适配Windows、macOS、Linux不同系统的路径分隔符规则 - 文件名格式匹配:将原代码中横杠分隔的文件名调整为空格分隔,完全符合你要求的
Form W-2/Form W-2 2020路径格式 - 优化文件操作:改用
with语法管理文件写入,无需手动调用close(),异常场景下也不会出现文件句柄泄漏问题
可选优化
如果表单名称中包含/`:``*`等系统禁止的文件名字符,可增加字符替换逻辑,避免文件保存失败,示例:
form_name = form_number.text.strip().replace('/', '_').replace('\\', '_').replace(':', '_').replace('*', '_')
内容的提问来源于stack exchange,提问作者Andre Heslop
相关产品推荐
相关产品推荐

