Как извлечь имя файла из URL и добавить к нему слово?

У меня есть следующий URL:

url = http://photographs.500px.com/kyle/09-09-201315-47-571378756077.jpg

Я хотел бы извлечь имя файла в этом URL: 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

Как я могу сделать это?

Ответ 1

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

возможно использовать ".jpg" в последнем случае, так как a. также может быть в имени файла.

Ответ 2

Вы можете использовать urlparse и os.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

Ответ 3

Вы можете просто разделить URL на "/" и получить последний элемент списка:

    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

Ответ 4

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'

Ответ 6

Иногда есть строка запроса:

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