【问题标题】:urllib: Get name of file from direct download linkurllib:从直接下载链接获取文件名
【发布时间】:2017-08-26 07:17:26
【问题描述】:

Python 3. 可能需要使用 urllib 来做到这一点,

我需要知道如何向直接下载链接发送请求,并获取它尝试保存的文件的名称。

(例如,来自 CurseForge 的 KSP 模组:https://kerbal.curseforge.com/projects/mechjeb/files/2355387/download

当然,文件 ID (2355387) 会更改。它可以来自任何项目,但总是在 CurseForge 上。 (如果这对下载方式有影响的话。)

该示例链接生成文件:

如何在 Python 中返回该文件名?

编辑:我应该注意,我想避免保存文件,读取名称,然后尽可能删除它。这似乎是最糟糕的方法。

【问题讨论】:

    标签: python python-3.x download request urllib


    【解决方案1】:

    使用urllib.request,当您从一个url请求响应时,响应包含对您正在下载的url的引用。

    >>> from urllib.request import urlopen    
    >>> url = 'https://kerbal.curseforge.com/projects/mechjeb/files/2355387/download'
    >>> response = urlopen(url)
    >>> response.url
    'https://addons-origin.cursecdn.com/files/2355/387/MechJeb2-2.6.0.0.zip'
    

    您可以使用os.path.basename 获取文件名:

    >>> from os.path import basename
    >>> basename(response.url)
    'MechJeb2-2.6.0.0.zip'
    

    【讨论】:

    • os.path 在 URL 上工作对我来说也很奇怪。这是有意的还是仅仅是无意的好处?
    • 查看Get URL path sections 的答案。更一般地,您可能希望使用 urlparseposixpath 的组合。
    【解决方案2】:
    from urllib import request
    
    url = 'file download link'
    filename = request.urlopen(request.Request(url)).info().get_filename()
    

    【讨论】:

    • 您好,欢迎来到 SO!虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。请阅读tourHow do I write a good answer?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2014-08-27
    相关资源
    最近更新 更多