Как я могу создать функцию для скачивания файлов с отображением прогресса в процентах? У меня есть три файла на GitHub: 5mb.txt, 10mb.txt и 20mb.txt, и я пытаюсь их скачать.
Размер файла из GitHub не всегда увеличивается на 37% от указанного размера. Возможно, вы наблюдаете увеличение размера из-за использования сжатия данных при передаче файлов. Это может быть вызвано настройками сервера GitHub или другими факторами, связанными с протоколом передачи данных. Для создания функции скачивания файлов с отображением прогресса в процентах вы можете использовать модуль requests в Python. Вот пример функции: ```python import requests def download_file(url, save_path): response = requests.get(url, stream=True) total_size = int(response.headers.get('content-length', 0)) with open(save_path, 'wb') as file: downloaded_size = 0 for data in response.iter_content(chunk_size=4096): downloaded_size += len(data) file.write(data) progress = downloaded_size / total_size * 100 print(f"Downloaded {progress:.2f}%") ``` Вы можете использовать эту функцию для скачивания ваших файлов с GitHub следующим образом: ```python download_file('https://github.com/username/repo/raw/main/5mb.txt', '5mb.txt') download_file('https://github.com/username/repo/raw/main/10mb.txt', '10mb.txt') download_file('https://github.com/username/repo/raw/main/20mb.txt', '20mb.txt') ``` Замените `'https://github.com/username/repo/raw/main/...'` вашей ссылкой на файлы.
event.loaded / data - неясно, поскольку не понятно, какое значение имеет data. event.total = 0 - это означает, что общий размер файла неизвестен. Прогресс загрузки будет приблизительным и будет зависеть от скорости загрузки, о которой решает браузер. lengthComputable = false - это означает, что общий размер файла не может быть определен. Это значение следует игнорировать. Почему: https://stackoverflow.com/a/47287125/1603055 - в этом посте разъясняется, что файл вероятно передается в виде base64-кодированного текста. Также отмечается, что он может быть сжатым, но если файл содержит случайный текст, то он не будет сжат и будет передан в большем объеме. Рекомендуется анализировать заголовки, особенно Content-type, чтобы понять, что именно передается и в каком формате. Чтобы правильно отобразить прогресс, следует использовать Content-Length, если он доступен. А вы сами то открывали файл по ссылке из data.git_url?Там отдаётся JSON с файлом, закодированным в Base64. В Base64 каждые 6 бит исходного файла кодируются одним символом (8 бит) текста, а после каждых 60 символов добавляется символ переноса строки. Вот и получаем ~ (2/6 + 8/360) = 35.6% дополнительно к объёму. Если хотите получить файл сам по себе, то используйте поле download_url.