You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在urlretrieve中用变量指定目标文件?遇FileNotFoundError求指导

解决urllib.request.urlretrieve抛出的FileNotFoundError问题

我一眼就看出问题出在你代码的第7行啦!你写的'y/z.s'是一个固定字符串,Python会直接把它当作路径去寻找,而不是替换成你之前输入的变量y、z和s。这就导致系统找不到名为y的文件夹和z.s的文件,自然抛出了FileNotFoundError。

错误原因详解

当你用单引号把y/z.s包起来时,Python不会识别里面的y、z、s是变量,只会把它当成字面意义上的路径:当前工作目录下的y子文件夹里的z.s文件。而你实际想要的是把用户输入的目标地址、文件名和扩展名拼接成真实的路径。

修正后的代码方案

这里推荐使用Python的f-string(Python 3.6+支持)来优雅地拼接路径变量,同时为了避免目标目录不存在的问题,我们可以提前用os模块创建目录:

import urllib.request
import os

# 获取用户输入
x = input("enter the source link: ")  # 文件下载源地址
y = input("enter the destination address: ")  # 文件保存目录
z = input("enter file name: ")  # 保存的文件名
s = input("enter extension type: ")  # 文件扩展名

# 确保目标目录存在,不存在则创建(包括多级目录)
os.makedirs(y, exist_ok=True)

# 拼接完整的保存路径:目标目录 + 文件名.扩展名
# 用os.path.join自动适配不同系统的路径分隔符(Windows用\,Linux/macOS用/)
full_path = os.path.join(y, f"{z}.{s}")

# 执行下载
print('Beginning file download...')
urllib.request.urlretrieve(x, full_path)
print('File downloaded successfully!')

额外注意事项

  • 使用os.makedirs(y, exist_ok=True)可以避免因为目标目录不存在而报错,exist_ok=True表示如果目录已经存在也不会抛出错误。
  • 如果你担心用户输入的扩展名带.(比如输入.txt而不是txt),可以加一行处理:s = s.lstrip('.'),确保路径格式正确。

内容的提问来源于stack exchange,提问作者I8PI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:51:27