Как скачать файл с помощью Python

С учетом того, что в 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».

14 комментариев к “Как скачать файл с помощью Python”

  1. Аноним

    так мразь, я твою семью пристрелю, еще раз спросишь тварина, я твою голову разьебу об стену, мне похуй на wget

  2. Аноним

    مهرتي الصغيرة مهرتي الصغيرة مهرتي الصغيرة ضد مهرتي الصغيرةvvv مهرتي الصغيرة

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *