Скачивание и распаковка .gz файла в Python: requests, shutil
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того, чтобы безопасно загрузить файл по http-адресу и сохранить его на диске, в Python, рекомендуется использовать библиотеку requests
:
import requests
response = requests.get('http://example.com/file.txt')
response.raise_for_status() # Если скрипт пришел до этой строки, значит, загрузка прошла успешно.🎉
with open('local_file.txt', 'wb') as file:
file.write(response.content)
Приведенный выше код скачает файл с адреса 'http://example.com/file.txt'
и сохранит его на вашем устройстве под именем 'local_file.txt'
.
Как справиться с загрузкой больших файлов
В случае работы с большими файлами рекомендуется использовать потоковую загрузку, чтобы избежать перерасхода памяти:
import requests
response = requests.get('http://example.com/largefile.zip', stream=True)
response.raise_for_status()
with open('large_file.zip', 'wb') as file:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
file.write(chunk)
Данный подход позволяет загружать большие файлы, не расходуя избыточного объема памяти.
Обработка архивных файлов
Если вам нужно работать с файлом в формате .gz
, модуль gzip
сможет распаковать его после загрузки:
import gzip
import shutil
with gzip.open('file.gz', 'rb') as f_in:
with open('file.txt', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
Выполнив это, gz-файл будет распакован и готов к использованию.
Продвинутое использование библиотеки requests
requests
предоставляет множество дополнительных функций для совершенствования вашего кода, в том числе: обработку ошибок и использование сессий:
from requests.exceptions import HTTPError
try:
with requests.Session() as session:
response = session.get('http://example.com/file.txt')
response.raise_for_status() # Успешная загрузка файлов – непосредственная цель!
# Здесь должен быть весь последующий код вашей программы...
except HTTPError as http_err:
print(f'HTTP ошибка: {http_err}') # Конкретизация сообщения об ошибке
except Exception as err:
print(f'Ошибка: {err}') # Осуществление широкого перехвата исключений для обеспечения стабильности кода
Визуализация
Загрузка файла: 💾 ↔️ 🌐
1. **Установка сетевого соединения:** `with urllib.request.urlopen('http://example.com/file') as response:`
2. **Чтение данных файла:** `data = response.read()`
Сохранение файла на диск: 💾 ↔️ 💻
1. **Создание локального файла:** `with open('downloaded_file', 'wb') as file:`
2. **Запись данных в файл:** `file.write(data)`
Подумайте о переменной data
как о ценном ресурсе, который вы сначала загружаете из интернета (🌐) при помощи urllib.request
, а затем сохраняете на своем устройстве (💻).
Альтернативы для профессионалов
Для упрощенной загрузки файлов вы можете использовать wget
:
import wget
file_url = 'http://example.com/file.txt'
file_name = wget.download(file_url)
wget
– это идеальный выбор для тех, кто ценит простоту и эффективность.
Манипуляции с изображениями при помощи PIL
Если вам необходимо работать с изображениями, рекомендуется воспользоваться библиотекой PIL
:
from PIL import Image
import requests
from io import BytesIO
response = requests.get('http://example.com/image.png')
image = Image.open(BytesIO(response.content))
image.save('local_image.png')
Здесь все просто: изображение получено из интернета, обрабатывается и сохраняется.
Совместимость с версиями Python
Обеспечте совместимость с вашей версией Python. Для Python 3.x используйте urllib.request.urlretrieve
:
import urllib.request
local_filename, headers = urllib.request.urlretrieve('http://example.com/file.txt')
Данный код прекрасно подходит для работы с последними версиями Python.
Оценка производительности кода с использованием профилирования
Нужно загрузить очень большой файл или делать это регулярно? Профилирование поможет обнаружить узкие места в коде:
import cProfile
def download_file(url):
…
cProfile.run('download_file("http://example.com/largefile.zip")')
Профилирование поможет выявить и оптимизировать узкие места в вашем коде.
Полезные материалы
- Requests: HTTP for Humans™ — официальная документация библиотеки Requests – Подробное руководство по
requests
. - Загрузка больших файлов в Python с помощью Requests – Stack Overflow – Практичные советы и рекомендации.
- Встроенные функции — документация Python – Информация о функции
open()
. - urllib.request — библиотека для URL-запросов — документация Python – Подробности о возможностях и использовании
urllib.request
. - shutil — работа с файлами и файловыми коллекциями — документация Python – Все, что нужно знать о функции
shutil.copyfileobj()
. - Продвинутое использование — документация Requests – Информация о потоковой загрузке и других продвинутых возможностях библиотеки
requests
.