使用 urlretrieve() 将文件下载到子文件夹

Posted

技术标签:

【中文标题】使用 urlretrieve() 将文件下载到子文件夹【英文标题】:Download file with urlretrieve() to subfolder 【发布时间】:2018-03-06 22:07:08 【问题描述】:

是否可以使用urlretrieve() 将某些内容下载到子文件夹中而不以绝对但相对的方式表达它? 例如:

urllib.request.urlretrieve(url, '/downloads/2017/foo.txt')

每次我向文件名添加路径时,python 都会引发以下错误:

文件“C:\Program Files\Python36\lib\urllib\request.py”,第 258 行,在 urlretrieve 中 tfp = 打开(文件名,'wb') FileNotFoundError: [Errno 2] 没有这样的文件或目录:'/downloads/2017/foo.txt'

但是当我使用这段代码时:

urllib.request.urlretrieve(url, 'foo.txt')

它会愉快地下载文件。

我想我在这里遗漏了一些基本的东西,但是在搜索了很长一段时间后,我还没有找到答案。有谁知道在urlretrieve() 方法中应该如何表达相对文件路径?

【问题讨论】:

删除前导斜杠 -- 使用 'downloads/2017/foo.txt'。前导斜线告诉您的计算机转到文件系统的根目录(即到 `C:\`)。要获得相对于当前目录的路径,不要以斜杠开头。 @HaydenSchiff 仍然是同样的错误。我什至尝试使用双反斜杠,但我得到了同样的错误。 文件夹“downloads”和“2017”是否已存在于您运行此脚本的目录中? @HaydenSchiff 是的,他们这样做了 @HaydenSchiff 实际上,他们没有。我拼错了文件夹。感谢您为我指明正确的方向! 【参考方案1】:

使用urllib.request.urlretrieve() 时,如果要将文件保存在程序位置以外的其他位置,则需要确保您引用的文件夹已经存在。或者,如果它们不存在,您可以使用以下代码生成所需的文件夹:

for i in directories:
    if not os.path.isdir(i):
        os.makedirs(i)

如果您仍然收到FileNotFoundError,请检查拼写错误。

【讨论】:

以上是关于使用 urlretrieve() 将文件下载到子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

python urlretrieve 下载图片

[转]urllib模块urlretrieve方法

如何知道 urllib.urlretrieve 是不是成功?

urllib使用三--urlretrieve下载文件

Python3 爬虫04_urllib.request.urlretrieve

AttributeError:“模块”对象没有属性“urlretrieve”