Не брать значение после определённых символов
Нужно разделить строку https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483 так, чтобы получилось:
cvM38hAo.jpg.
Метод split делит строку только одним символом, на выходе получается cvM38hAo.jpg?size=604x483.
Нужно также убрать всё, что идёт после ?.
Ответы (3 шт):
Автор решения: MaxU
→ Ссылка
Лучше всего воспользоваться соответствующими инструментами для парсинга URL и путей:
import os
from urllib.parse import urlparse
url = "https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483"
res = os.path.basename(urlparse(url).path)
результат:
In [309]: res
Out[309]: 'cvM38hAo.jpg'
Автор решения: strawdog
→ Ссылка
Вариант от MaxU предпочтительней, но для общего сведения вот еще решение через регулярки:
import re
a = "https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483"
res = re.match(r".+/(.+)\?", a).group(1)
res:
'cvM38hAo.jpg'
Автор решения: Shamus Rezol
→ Ссылка
Еще один способ для ознакомления, в котором не используются какие-либо модули.
def url2filename(url: str, extensions: tuple=(".jpg", ".png", ".gif")):
"""Ищет имя (единственного) файла в url по его расширению."""
for ext in extensions:
index = url.find(ext) # index - индекс первого символа ext в url
if index == -1:
continue
result = url[:index + len(ext)]
while index > -1:
index -= 1
if result[index] in "/\\?%*:|":
result = result[index + 1:]
break
return result
print(url2filename("https://sun9-65.userapi.com/impf/JetMttw4tKqGGrPmAy_u00gKPdWhq79dT18gp-Q/cvM38hAo.jpg?size=604x483"))