我有以下网址:
url = http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg
我想在这个网址中提取文件名:09-09-201315-47-571378756077.jpg
获得此文件名后,我将使用此名称将其保存到桌面.
filename = **extracted file name from the url**
download_photo = urllib.urlretrieve(url, "/home/ubuntu/Desktop/%s.jpg" % (filename))
Run Code Online (Sandbox Code Playgroud)
在此之后,我将调整照片的大小,一旦完成,我将保存调整大小的版本并在文件名的末尾附加单词"_small".
downloadedphoto = Image.open("/home/ubuntu/Desktop/%s.jpg" % (filename))
resize_downloadedphoto = downloadedphoto.resize.((300, 300), Image.ANTIALIAS)
resize_downloadedphoto.save("/home/ubuntu/Desktop/%s.jpg" % (filename + _small))
Run Code Online (Sandbox Code Playgroud)
从这个,我想要实现的是获得两个文件,原始照片与原始名称,然后调整大小的照片与修改名称.像这样:
09-09-201315-47-571378756077.jpg
09-09-201315-47-571378756077_small.jpg
我该怎么做呢?
Ofi*_*ael 88
您可以使用urlparse和os.path内置python模块.例:
import os, sys
PY3 = sys.version_info[0] >= 3
if PY3: #python3
from urllib.parse import urlparse
else: #python2
from urlparse import urlparse
url = "http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg"
a = urlparse(url)
print(a.path) #Output: /kyle/09-09-201315-47-571378756077.jpg
print(os.path.basename(a.path)) #Output: 09-09-201315-47-571378756077.jpg
Run Code Online (Sandbox Code Playgroud)
如果您无法导入urlparse,请尝试以下操作:
Python 2
import os, sys
PY3 = sys.version_info[0] >= 3
if PY3: #python3
from urllib.parse import urlparse
else: #python2
from urlparse import urlparse
url = "http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg"
a = urlparse(url)
print(a.path) #Output: /kyle/09-09-201315-47-571378756077.jpg
print(os.path.basename(a.path)) #Output: 09-09-201315-47-571378756077.jpg
Run Code Online (Sandbox Code Playgroud)
Python 3
import os, sys
PY3 = sys.version_info[0] >= 3
if PY3: #python3
from urllib.parse import urlparse
else: #python2
from urlparse import urlparse
url = "http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg"
a = urlparse(url)
print(a.path) #Output: /kyle/09-09-201315-47-571378756077.jpg
print(os.path.basename(a.path)) #Output: 09-09-201315-47-571378756077.jpg
Run Code Online (Sandbox Code Playgroud)
Ric*_*kyA 19
filename = url[url.rfind("/")+1:]
filename_small = filename.replace(".", "_small.")
Run Code Online (Sandbox Code Playgroud)
也许在最后一种情况下使用".jpg",因为a.也可以在文件名中.
P i*_*P i 12
os.path.basename(url)
为什么要努力?
In [1]: os.path.basename("https://foo.com/bar.html")
Out[1]: 'bar.html'
In [2]: os.path.basename("https://foo.com/bar")
Out[2]: 'bar'
In [3]: os.path.basename("https://foo.com/")
Out[3]: ''
In [4]: os.path.basename("https://foo.com")
Out[4]: 'foo.com'
Run Code Online (Sandbox Code Playgroud)
Bry*_*yan 11
您可以将URL拆分为"/"并检索列表的最后一个成员:
url = "http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg"
filename = url.split("/")[-1]
#09-09-201315-47-571378756077.jpg
Run Code Online (Sandbox Code Playgroud)
然后replace用来改变结局:
small_jpg = filename.replace(".jpg", "_small.jpg")
#09-09-201315-47-571378756077_small.jpg
Run Code Online (Sandbox Code Playgroud)
ccp*_*zza 11
使用 python3(从 3.4 起),您可以通过以下方式滥用该库:pathlib
from pathlib import Path\n\np = Path(\'http://example.com/somefile.html\')\nprint(p.name)\n# >>> \'somefile.html\'\n\nprint(p.stem)\n# >>> \'somefile\'\n\nprint(p.suffix)\n# >>> \'.html\'\n\nprint(f\'{p.stem}-spamspam{p.suffix}\')\n# >>> \'somefile-spamspam.html\'\n\nRun Code Online (Sandbox Code Playgroud)\n该pathlib模块不适用于解析 URL \xe2\x80\x94,它仅设计用于 POSIX 路径。不要在生产代码中使用它!对于非关键代码来说,这是一种肮脏的快速破解。也适用于 URL 的事实pathlib可以被视为一个意外,可能会在未来的版本中修复。该代码仅作为示例提供,说明您可以执行但可能不应该执行的操作。如果您需要以规范方式解析 URL,那么更喜欢使用urllib.parse或替代方案。或者,如果您假设域之后和参数+查询+哈希之前的部分被认为是 POSIX 路径,那么您可以使用urllib.parse.urlparse提取路径片段,然后使用pathlib.Path它来操作它。
用于urllib.parse.urlparse仅获取URL的路径部分,然后pathlib.Path在该路径上使用以获取文件名:
from urllib.parse import urlparse
from pathlib import Path
url = "http://example.com/some/long/path/a_filename.jpg?some_query_params=true&some_more=true#and-an-anchor"
a = urlparse(url)
a.path # '/some/long/path/a_filename.jpg'
Path(a.path).name # 'a_filename.jpg'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27484 次 |
| 最近记录: |