С учетом того, что в Python огромное количество функций и пакетов, иногда может быть непросто найти простое и эффективное решение своей проблемы. Я понял это, когда озадачился вопросом, как скачать файл по ссылке с помощью Python. Я нашел много решений, но меня не устраивала их сложность. Мне было интересно, почему для решения такой простой проблемы, как эта, нужно импортировать так много пакетов.
Итак, перед нами стоит следующая задача. У нас есть url файла (любого формата), и этот файл нужно при помощи Python скачать в нашу локальную систему.
Решение
Необходимые условия
Поскольку постановка задачи связана с url, нам понадобится пакет requests из Python.
import requests
Определение переменных
Здесь мы добавляем url файла для загрузки и указываем расширение файла (например, .mp3, .pdf и т.д.).
url = '<ваш url>' file_extension = '.<file extension>'
Имя файла
Поскольку мы загружаем файл, хотелось бы получить его имя. Обычно имя файла – это последняя часть url с расширением. Вот код для получения этого имени (и добавления к нему расширения, если оно не существует):
# Если в конце url нет расширения, добавить его if file_extension not in url.split(“/”)[-1]: filename = f’{last_url_path}{file_extension}’ # Иначе - взять последнюю часть url как filename else: filename = url.split(“/”)[-1]
Создание файла
Давайте сначала посмотрим на код, а затем пройдемся по нему построчно.
with open(filename, ‘wb’) as f: f.write(r.content)
- Использование
with
. В Python ключевое словоwith
используется при работе с неуправляемыми ресурсами (например, файловыми потоками). Оно позволяет гарантировать, что ресурс будет “очищен”, когда код, использующий его, завершит работу, даже если будут брошены исключения. - Поскольку мы хотим записать в файл (или создать его), а файл имеет тип bytes, то для открытия файла мы используем права ‘wb’. Если существует файл с таким же именем, он будет перезаписан. Примечание: если тип файла не .txt, для выполнения операций открывайте его в двоичном режиме.
r.content
вернет файл в base64, который мы затем запишем в наш файл.
Примечание редакции: об открытии, чтении и записи файлов, а также об использовании with
можно почитать в статье “Работа с файлами в Python”.
Окончательный код
После объединения всех вышеперечисленных пунктов наш код будет выглядеть примерно так:
import requests # Ссылка должна вести непосредственно на файл url = '<ваш url>' file_extension = '.<file extension>' # Example .wav r = requests.get(url) # Если в конце url нет расширения, добавить его if file_extension not in url.split("/")[-1]: filename = f'{last_url_path}{file_extension}' # Иначе - взять последнюю часть url как filename else: filename = url.split("/")[-1] with open(filename, 'wb') as f: # В качестве контента вы получите файл в base64 f.write(r.content)
Заключение
В интернете можно найти кучу разных решений для каждой проблемы. Задача разработчика – выбрать самое простое, читабельное и при этом эффективное решение для своего проекта.
Перевод статьи Gautam Rajeev Singh «How to download a file from a link using python».
Как насчет import wget?
так мразь, я твою семью пристрелю, еще раз спросишь тварина, я твою голову разьебу об стену, мне похуй на wget
СЛЫШЬ МРАЗЬ ТЫ КАК ОБЩАЕШЬСЯ НАХУЙ
общваюсь как хочу блять МНЕ ПОХУЦПОХУЙПОХУЙ *фак*
fucking russians blyat slava ukraina VSU NASHI KOTITKI
FREE PALESTINE ALLAHU AKBAR
чтоб ты сдох махмуд
тк что насчет wget
как насчет блять поставки оружия в иран нахуй в рыбе
مهرتي الصغيرة مهرتي الصغيرة مهرتي الصغيرة ضد مهرتي الصغيرةvvv مهرتي الصغيرة
повторим 1939??????????????????????????
卐
卐卐卐卐卐卐卐卐卐卐卐卐卐卐卐卐卐
SLAVA RUSSIA, FREE HAMAS, FREE POLAND