首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从URL中提取文件名并在其上添加一个单词?

如何从URL中提取文件名并在其上添加一个单词?
EN

Stack Overflow用户
提问于 2013-09-10 19:32:23
回答 11查看 79K关注 0票数 87

我有以下网址:

代码语言:javascript
运行
复制
url = http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg

我想提取这个网址中的文件名:09-09-201315-47-571378756077.jpg

一旦我得到这个文件名,我将用这个名称保存到桌面。

代码语言:javascript
运行
复制
filename = **extracted file name from the url**     
download_photo = urllib.urlretrieve(url, "/home/ubuntu/Desktop/%s.jpg" % (filename))

在此之后,我将调整照片的大小,一旦完成,我将保存调整大小的版本,并将单词"_small“附加到文件名的末尾。

代码语言:javascript
运行
复制
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))

从这里,我试图实现的是获得两个文件,原来的照片与原来的名称,然后调整大小的照片与修改后的名称。就像这样:

代码语言:javascript
运行
复制
09-09-201315-47-571378756077.jpg

改名为:

代码语言:javascript
运行
复制
09-09-201315-47-571378756077_small.jpg

我该怎么做呢?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-09-10 19:41:11

您可以将urllib.parse.urlparseos.path.basename结合使用

代码语言:javascript
运行
复制
import os
from urllib.parse 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

您的URL可能包含百分比编码字符,如%20表示空格,%E7%89%B9%E8%89%B2表示"特色“。如果是这样的话,您将需要unquote (或unquote_plus)它们。您还可以使用pathlib.Path().name而不是os.path.basename,这有助于在名称中添加后缀(就像在最初的问题中询问的那样):

代码语言:javascript
运行
复制
from pathlib import Path
from urllib.parse import urlparse, unquote

url = "http://photographs.500px.com/kyle/09-09-2013%20-%2015-47-571378756077.jpg"
urlparse(url).path

url_parsed = urlparse(url)
print(unquote(url_parsed.path))  # Output: /kyle/09-09-2013 - 15-47-571378756077.jpg
file_path = Path("/home/ubuntu/Desktop/") / unquote(Path(url_parsed.path).name)
print(file_path)        # Output: /home/ubuntu/Desktop/09-09-2013 - 15-47-571378756077.jpg

new_file = file_path.with_stem(file_path.stem + "_small")
print(new_file)         # Output: /home/ubuntu/Desktop/09-09-2013 - 15-47-571378756077_small.jpg

另外,另一种选择是使用unquote(urlparse(url).path.split("/")[-1])

票数 222
EN

Stack Overflow用户

发布于 2018-08-07 11:49:24

os.path.basename(url)

为什么要更努力?

代码语言:javascript
运行
复制
In [1]: os.path.basename("https://example.com/file.html")
Out[1]: 'file.html'

In [2]: os.path.basename("https://example.com/file")
Out[2]: 'file'

In [3]: os.path.basename("https://example.com/")
Out[3]: ''

In [4]: os.path.basename("https://example.com")
Out[4]: 'example.com'

说明2020-12-20

到目前为止,还没有人提供一个完整的解决办法。

URL可以包含?[query-string]和/或#[fragment Identifier] (但只能按顺序:参考)。

代码语言:javascript
运行
复制
In [1]: from os import path

In [2]: def get_filename(url):
   ...:     fragment_removed = url.split("#")[0]  # keep to left of first #
   ...:     query_string_removed = fragment_removed.split("?")[0]
   ...:     scheme_removed = query_string_removed.split("://")[-1].split(":")[-1]
   ...:     if scheme_removed.find("/") == -1:
   ...:         return ""
   ...:     return path.basename(scheme_removed)
   ...:

In [3]: get_filename("a.com/b")
Out[3]: 'b'

In [4]: get_filename("a.com/")
Out[4]: ''

In [5]: get_filename("https://a.com/")
Out[5]: ''

In [6]: get_filename("https://a.com/b")
Out[6]: 'b'

In [7]: get_filename("https://a.com/b?c=d#e")
Out[7]: 'b'
票数 34
EN

Stack Overflow用户

发布于 2013-09-10 19:39:59

代码语言:javascript
运行
复制
filename = url[url.rfind("/")+1:]
filename_small = filename.replace(".", "_small.")

在最后一种情况下可能使用".jpg“。也可以在文件名中。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18727347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档