Python创建月度文件夹下载zip时出现Permission denied权限错误如何解决
错误根因
你遇到的权限报错和os.chmod无关,是两个基础代码错误导致的:
- 未导入
urllib相关模块,代码中导入了requests但实际使用urllib的方法 urllib.urlretrieve的第二个参数要求传入带文件名的完整存储路径,你直接传入了文件夹路径,系统无法将文件写入文件夹对象,因此触发权限类报错
修正方案
- 补充导入所需的
urllib.request模块(如果是Python2调整为对应urllib即可,以下默认Python3环境) - 拼接完整的zip文件存储路径,不要直接传文件夹路径
- 建议用
requests下载文件更稳定,你已经导入了requests可以直接复用,不需要用urllib
可运行完整代码
import requests import os from datetime import datetime # 生成月份标识 d = datetime.today().strftime('%b%y') # 输出格式如Oct24 # 目标文件夹路径 base_dir = 'L:/Support/Data_load/NativeTitle' newpath = os.path.join(base_dir, d) # 创建文件夹,exist_ok=True避免重复创建报错 os.makedirs(newpath, exist_ok=True) # 拼接完整的文件保存路径,保留原zip文件名 zip_filename = 'NTDA_Schedule_Nat_shp.zip' save_full_path = os.path.join(newpath, zip_filename) print(f'Folder created in {base_dir}') print('Beginning file download...') url = 'http://www.nntt.gov.au/GeoDocs//ESRI/NTDA_Schedule_Nat_shp.zip' # 用已导入的requests下载,避免urllib版本兼容问题 resp = requests.get(url, timeout=120) resp.raise_for_status() # 下载失败直接抛出异常 # 写入文件 with open(save_full_path, 'wb') as f: f.write(resp.content) print(f'File saved to {save_full_path} successfully')
额外说明
如果你的环境是Python2,只需要把requests写入部分替换为urllib的写法即可,核心逻辑还是必须指定完整的带文件名的存储路径,不需要额外调用os.chmod修改权限,除非你的磁盘目录本身有严格的权限管控,这种情况需要联系运维给当前运行Python的账户开通对应目录的读写权限即可。
内容的提问来源于stack exchange,提问作者Vanessa
相关产品推荐
相关产品推荐

