如何从URL中提取文件名&对它说一句话?

时间:2013-09-10 19:32:23

标签: python django

我有以下网址:

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))

在此之后,我将调整照片的大小,一旦完成,我将保存调整大小的版本并在文件名的末尾附加单词“_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))

从这里,我想要实现的是获取两个文件,原始照片与原始名称,然后调整大小的照片与修改后的名称。像这样:

09-09-201315-47-571378756077.jpg

09-09-201315-47-571378756077_small.jpg

我该怎么做呢?

10 个答案:

答案 0 :(得分:73)

您可以使用urlparseos.path内置python模块。 例如:

>>> import urlparse, os
>>> url = "http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg"
>>> a = urlparse.urlparse(url)
>>> a.path
'/kyle/09-09-201315-47-571378756077.jpg'
>>> os.path.basename(a.path)
'09-09-201315-47-571378756077.jpg'

如果导入urlparse时遇到问题,请尝试以下操作:

Python 2

from six.moves.urllib.parse import urlparse

Python 3

from urllib.parse import urlparse

答案 1 :(得分:13)

filename = url[url.rfind("/")+1:]
filename_small = filename.replace(".", "_small.")

可能在最后一种情况下使用“.jpg”,因为a。也可以在文件名中。

答案 2 :(得分:9)

您可以将网址拆分为“/”并检索列表的最后一个成员:

    url = "http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg"
    filename = url.split("/")[-1] 
    #09-09-201315-47-571378756077.jpg

然后使用replace更改结尾:

    small_jpg = filename.replace(".jpg", "_small.jpg")
    #09-09-201315-47-571378756077_small.jpg

答案 3 :(得分:8)

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'

答案 4 :(得分:5)

使用urllib.parse.urlparse仅获取path part of the 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'

答案 5 :(得分:2)

使用 python3(从 3.4 起),您可以通过以下方式滥用 pathlib 库:

from pathlib import Path

p = Path('http://example.com/somefile.html')
print(p.name)
# >>> 'somefile.html'

print(p.stem)
# >>> 'somefile'

print(p.suffix)
# >>> '.html'

print(f'{p.stem}-spamspam{p.suffix}')
# >>> 'somefile-spamspam.html'


答案 6 :(得分:1)

Python split url to find image name and extension

可帮助您提取图像名称。附加名称:

imageName =  '09-09-201315-47-571378756077'

new_name = '{0}_small.jpg'.format(imageName) 

答案 7 :(得分:0)

有时会有一个查询字符串:

filename = url.split("/")[-1].split("?")[0] 
new_filename = filename.replace(".jpg", "_small.jpg")

答案 8 :(得分:0)

使用 os 包的简单版本:

import os

def get_url_file_name(url):
    url = url.split("#")[0]
    url = url.split("?")[0]
    return os.path.basename(url)

示例:

print(get_url_file_name("example.com/myfile.tar.gz"))  # 'myfile.tar.gz'
print(get_url_file_name("example.com/"))  # ''
print(get_url_file_name("https://example.com/"))  # ''
print(get_url_file_name("https://example.com/hello.zip"))  # 'hello.zip'
print(get_url_file_name("https://example.com/args.tar.gz?c=d#e"))  # 'args.tar.gz'

答案 9 :(得分:-1)

我们可以使用ntpath模块从网址中提取文件名。

import ntpath
url = 'http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg'
name, ext = ntpath.splitext(ntpath.basename(url))
# 09-09-201315-47-571378756077  .jpg


print(name + '_small' + ext)
09-09-201315-47-571378756077_small.jpg