Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python urllib:从直接下载链接获取文件名_Python_Python 3.x_Download_Request_Urllib - Fatal编程技术网

Python urllib:从直接下载链接获取文件名

Python urllib:从直接下载链接获取文件名,python,python-3.x,download,request,urllib,Python,Python 3.x,Download,Request,Urllib,Python 3。可能需要使用urllib来完成此操作 我需要知道如何向直接下载链接发送请求,并获取它试图保存的文件的名称 (例如,来自CurseForge:的KSP mod) 当然,文件ID(2355387)将被更改。它可以来自任何项目,但总是在CurseForge上。(如果这对下载方式有影响的话。) 该示例链接将生成以下文件: 如何在Python中返回该文件名 编辑:我应该注意,我希望避免保存文件、读取名称,然后尽可能删除它。这似乎是最糟糕的方法。当您从url请求响应时,响应包含对您正在下

Python 3。可能需要使用urllib来完成此操作

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

(例如,来自CurseForge:的KSP mod)

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

该示例链接将生成以下文件:

如何在Python中返回该文件名

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

当您从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'
您可以使用获取文件名:

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

对我来说,
os.path
在URL上工作也很奇怪。这是有意的还是无意的好处?请参阅的答案。一般来说,您可能希望结合使用和
posixpath
。您好,欢迎使用SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请阅读,然后
from urllib import request

url = 'file download link'
filename = request.urlopen(request.Request(url)).info().get_filename()