Легко загружайте, проверяйте и извлекайте архивы
Если у вас есть наборы данных или другие архивы, которые вы хотите сделать доступными для своих пользователей, и вы хотите, чтобы у них всегда были самые последние версии и они загружались правильно, вам может помочь fastdownload
.
Использование пипа:
pip install fastdownload
... или используя Конду:
conda install -c fastai fastdownload
Ситуация, в которой вы можете захотеть использовать fastdownload
— это когда у вас есть один или несколько URL-адресов, указывающих на некоторые архивы, которые вы хотите сделать доступными, и вы хотите убедиться, что ваши пользователи загружают эти архивы правильно, имеют последнюю версию и что это так же просто чтобы они могли получить доступ к информации в этих архивах.
Ваш пользователь просто вызывает один метод FastDownload.get
, передавая требуемый URL-адрес, и URL-адрес будет загружен и извлечен в выбранные вами каталоги. Возвращается путь к извлеченному файлу. Если этот URL-адрес уже загружен, кэшированный архив или содержимое будут использоваться автоматически. Однако, если этот размер или хэш архива отличается от того, что должно быть, пользователь будет проинформирован об этом и будет загружена новая версия.
В будущем вы, возможно, захотите обновить один или несколько ваших архивов. Когда вы это сделаете, fastdownload
обеспечит вашим пользователям самую последнюю версию, проверив загруженные ими архивы на соответствие обновленному размеру файла и хеш-информации.
Например, fastai
использует fastdownload
для предоставления доступа к наборам данных для глубокого обучения. пользователи fastai
могут загружать и извлекать их с помощью одной команды, используя возвращаемое значение для доступа к файлам. Файлы автоматически помещаются в соответствующие подкаталоги папки .fastai
в домашнем каталоге пользователя. Если набор данных обновляется, пользователи уведомляются об этом при следующем использовании набора данных, а последняя версия автоматически загружается и извлекается для них.
Когда ваши пользователи загружают архив, fastdownload
автоматически сохраняет его в каталог, проверяет соответствие размера и хеша и извлекает содержимое. Минимальное использование для загрузки и извлечения:
из импорта fastdownload FastDownloadd = FastDownload()path = d.get('https://...')
После этого path
будет содержать путь, по которому расположены извлеченные файлы. По умолчанию архивы сохраняются в {base}/archive
и извлекаются в {base}/data
. По умолчанию {base}
имеет значение ~/.fastdownload
. Если в корне скачанного архива находится более одного файла или папки, то в data
для содержимого создается новая папка.
Вместо get
используйте download
для загрузки URL-адреса без его распаковки или extract
для извлечения URL-адреса без его загрузки (при условии, что он уже загружен в каталог archive
). Все эти методы принимают параметр force
, который будет загружать/извлекать архив, даже если он уже существует.
Вы можете изменить любой или все пути base
, archive
и data
, передав их в FastDownload
:
d = FastDownload(base='~/.mypath', archive='downloaded', data='extracted')
Вы можете удалить кэшированный архивный файл и/или извлеченное содержимое с помощью rm
:
d.rm('https://...')
fastdownload
добавит файл download_checks.py
в ваш модуль Python, который содержит размеры файлов и хэши для ваших архивов. Файл находится в том же каталоге, что и выбранный вами модуль, например:
d = FastDownload(module=fastai.some_module)
Затем используйте update
, чтобы создать или обновить размер и хэш URL-адреса:
d.update('https://...')
Теперь вы обнаружите файл с именем download_checks.py
в том же каталоге, где находится fastai.some_module
, который содержит словарь Python с URL-адресом, размером и хешем для этого файла. Если вы ранее загружали этот файл по пути к своему archive
, он будет использоваться вместо загрузки новой копии. Сначала используйте get(force=True)
, чтобы загрузить новую копию, даже если она есть в вашем архиве.
Если в вашем base
каталоге есть файл с именем config.ini
, то archive
ключей и data
будут использоваться в качестве значений по умолчанию для FastDownload
. Файл должен быть в формате configparser. Вот пример config.ini
:
[DEFAULT] archive = downloaded data = extracted
Если ini-файл отсутствует, он будет автоматически создан для вас с использованием данных, которые вы передаете FastDownload
.
Вы можете добавить в файл конфигурации любые дополнительные пары ключ/значение. Когда вы вызываете FastDownload.get
передайте extract_key
, чтобы использовать ключ, отличный от data
, для выбора места для извлечения.