Как загрузить файлы на Яндекс Диск, с помощью Python

Статьи

Как загрузить файлы на Яндекс Диск, с помощью Python

Автор: Рамис, 21 сентября 2019

Приветствую всех, в этом уроке речь пойдет о Яндекс.Диске, а именно о работе с ней через Python. Данный урок будет полезен для новичков, в качестве примера напишем небольшую программу, и научим ее загружать не только файлы, но и папки с содержимым.

Яндекс.Диск REST API

Для начала получим токен, который необходим для работы с API Диском. Для этого перейдем по ссылке и зарегистрируем наше приложение, назовём его к примеру, backup, и дадим ему полное разрешение для работы с Я.Диском.

API Яндекс Диск

API Яндекс Диск

Теперь нужно просто перейти по этой ниже ссылке, заменив ID приложения на свой (ID вы получили после регистрации приложения), и токен готов.

https://oauth.yandex.ru/authorize?response_type=token&client_id=<id_приложения>

Python

Для работы с Я.Диск REST API будем использовать уже готовую библиотеку, установим ее командой.

pip install yadisk

Попробуем подключиться к нашему Я.Диску используя ранее полученный токен.

import yadisk
y = yadisk.YaDisk(token="токен")
print(y.check_token()) # Проверим токен

Вывод

True

Если результат True, значит вы все сделали правильно :)

Добавим еще небольшой код, который отправит несколько файлом, и создаст папку на Я.Диске.

y.mkdir("/test/Hello Word") # Создать папку
y.upload("file1.txt", "/test/file1.txt") # Загружает первый файл
y.upload("file2.txt", "/test/file2.txt") # Загружает второй файл

Результат.

загрузить файлы на Яндекс

Всё работает отлично, мы смогли загрузить наши файлы и создать папку.

Усложним задачу, и попробует не создать, а отправить всю папку с содержимым, так скажем, сделать backup данных.

import yadisk
import os
from datetime import datetime

y = yadisk.YaDisk(token="токен")

def run(path):
    date = datetime.strftime(datetime.now(), "%d.%m.%Y-%H.%M.%S")
    y.mkdir(f'/test/{date}')

    for address, dirs, files in os.walk(path):
        for dir in dirs:
            y.mkdir(f'/test/{date}/{dir}')
            print(f'Папка {dir} создана')
        for file in files:
            print(f'Файл {file} загружен')
            y.upload(f'{address}/{file}', f'/test/{date}/{file}')

if __name__ == '__main__':
    run(r'C:\folder\путь к папке для загрузки')

Результат

API Яндекс Диск

Теперь при каждом запуске скрипта, наши данные будут загружаться в папку с уникальным именем "дата и время загрузки".

По всем вопросом можете обратиться ко мне через обратную связь, буду рад помочь.