-
Notifications
You must be signed in to change notification settings - Fork 1
/
step2.py
72 lines (61 loc) · 4.39 KB
/
step2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Шаг 2 (запускаем скрипт на локальном компьютере, на который будут скачаны файлы)
"""
У себя на компе запустите скрипт представленный ниже.
Перед запуском не забудьте присвоить переменной assets значения, которые мы получили на предыдущем шаге.
"""
import os
import requests
import time
import random
my_url = 'https://code.s3.yandex.net'
assets = [ # !сюда нужно вставить данные, полученные на предыдущем шаге! ТРЕБУЕТСЯ ОЧЕНЬ МНОГО МЕСТА НА ДИСКЕ
'/datasets/autos.csv', '/datasets/arrivals.xlsx', '/datasets/calls.csv', '/datasets/data.csv']
count = 0
skip_count = 0
except_count = 0
all_count = len(assets)
except_items = []
# получаем путь, по которому мы будем сохранять файлы
save_path = os.getcwd()
# или можно задать папку в домашней директории.
# Например: save_path = os.path.join(os.path.expanduser("~"), 'download')
for item in assets:
try:
# получаем имя каталога и имя файла из item
dir_name, file_name = os.path.split(item)
# убираем символ "/" у dir_name, чтобы сделать имя относительным
dir_name = dir_name[1:] if dir_name.startswith('/') else dir_name
# создаём каталог на диске, если он не существует
os.makedirs(os.path.join(save_path, dir_name), exist_ok=True)
# проверить, существует ли уже файл в директории
if os.path.exists(os.path.join(save_path, dir_name + '/' + file_name)):
print(f"{item} уже существует, пропускаем загрузку...")
skip_count += 1 # пропускаем загрузку в случае уже существующего файла
else:
# скачиваем item и записываем его в переменную "r"
r = requests.get(my_url + item)
# сохраняем файл в директории заданной в переменной save_path.
with open(os.path.join(save_path, dir_name + '/' + file_name), 'wb') as f:
f.write(r.content)
# условие для добавления паузы
# условие будет истинным только тогда, когда значение count будет кратно случайному целому числу от 3 до 5.
if count % random.randint(3, 5) == 0:
print(f"Загружено {count} файлов из {all_count}")
# добавляем рандомную паузу перед загрузкой нового файла
# устанавливаем длительность паузы между загрузками = случайному целому числу от 2 до 8 секунд.
pause = random.randint(2, 8)
print(f"пауза между загрузкой файлов составляет {pause} секунд")
time.sleep(pause)
count += 1
upload_percentage = count / all_count # вычисляем процент загруженных файлов
print(f"{upload_percentage:.2%}", item)
except:
except_count += 1
except_items.append(item)
print(f'{item}!! не удалось скачать! номер итерации {count}')
print("Все файлы скачаны!")
print(f"Всего загружено {count} файла(ов) из {all_count}. Процент загруженных файлов составляет {count / all_count:.2%}")
print(f"Пропущено (уже существуют) {skip_count} файла(ов) из {all_count}. ")
print(f"Всего загрузок {count - except_count}")
print(f"Не удалось скачать по причине каких-то ошибок/прерываний: {except_count} файла(ов)")
print(f"Список пропущенных файлов по причине каких-то ошибок/прерываний: {except_items}")