Baixe, verifique e extraia arquivos facilmente
Se você tiver conjuntos de dados ou outros arquivos que deseja disponibilizar aos seus usuários e garantir que eles sempre tenham as versões mais recentes e que sejam baixados corretamente, fastdownload
pode ajudar.
Usando pip:
pip install fastdownload
...ou usando conda:
conda install -c fastai fastdownload
A situação em que você pode querer usar fastdownload
é quando você tem um ou mais URLs apontando para alguns arquivos que deseja disponibilizar e deseja garantir que seus usuários baixem esses arquivos corretamente, tenham a versão mais recente e que seja tão fácil possível para que eles acessem as informações nesses arquivos.
Seu usuário apenas chama um único método, FastDownload.get
, passando a URL necessária, e a URL será baixada e extraída para os diretórios que você escolher. O caminho para o arquivo extraído é retornado. Se esse URL já tiver sido baixado, o arquivo ou conteúdo em cache será usado automaticamente. Porém, se esse tamanho ou hash do arquivo for diferente do que deveria ser, o usuário será informado e uma nova versão será baixada.
No futuro, você pode querer atualizar um ou mais dos seus arquivos. Ao fazer isso, fastdownload
garantirá que seus usuários tenham a versão mais recente, verificando os arquivos baixados em relação ao tamanho do arquivo atualizado e às informações de hash.
Por exemplo, fastai
usa fastdownload
para fornecer acesso a conjuntos de dados para aprendizado profundo. Os usuários fastai
podem baixá-los e extraí-los com um único comando, usando o valor de retorno para acessar os arquivos. Os arquivos são automaticamente colocados em subdiretórios apropriados de uma pasta .fastai
no diretório inicial do usuário. Se um conjunto de dados for atualizado, os usuários serão informados na próxima vez que usarem o conjunto de dados, e a versão mais recente será automaticamente baixada e extraída para eles.
Quando seus usuários baixam um arquivo, fastdownload
o salva automaticamente em um diretório, verifica se o tamanho e o hash correspondem e extrai o conteúdo. O uso mínimo para download e extração é:
de fastdownload importar FastDownloadd = FastDownload()path = d.get('https://...')
Depois disso, path
conterá o caminho onde os arquivos extraídos estão localizados. Por padrão, os arquivos são salvos em {base}/archive
e extraídos em {base}/data
. O padrão de {base}
é ~/.fastdownload
. Se houver mais de um arquivo ou pasta na raiz do arquivo baixado, uma nova pasta será criada nos data
para o conteúdo.
Em vez de get
, use download
para baixar o URL sem extraí-lo ou extract
para extrair o URL sem baixá-lo (supondo que ele já tenha sido baixado no diretório archive
). Todos esses métodos aceitam um parâmetro force
que fará o download/extrairá o arquivo mesmo que ele já esteja presente.
Você pode alterar qualquer um ou todos os caminhos de base
, archive
e data
, passando-os para FastDownload
:
d = FastDownload(base='~/.mypath', archive='baixado', data='extraído')
Você pode remover o arquivo armazenado em cache e/ou o conteúdo extraído com rm
:
d.rm('https://...')
fastdownload
adicionará um arquivo download_checks.py
ao seu módulo Python que contém tamanhos de arquivo e hashes para seus arquivos. O arquivo está localizado no mesmo diretório do módulo que você escolher, por exemplo:
d = Download rápido (módulo = fastai.some_module)
Em seguida, use update
para criar ou atualizar o tamanho e o hash de um URL:
d.update('https://...')
Agora você descobrirá que existe um arquivo chamado download_checks.py
no mesmo diretório onde fastai.some_module
está localizado, que contém um ditado Python com a URL, tamanho e hash deste arquivo. Se você baixou este arquivo antes para o caminho archive
, ele será usado, em vez de baixar uma nova cópia. Use get(force=True)
primeiro para baixar uma nova cópia, mesmo que você a tenha em seu arquivo.
Se houver um arquivo chamado config.ini
em seu diretório base
, archive
de chaves e data
serão usados como valores padrão para FastDownload
. O arquivo deve estar no formato configparser. Aqui está um exemplo config.ini
:
[DEFAULT] archive = downloaded data = extracted
Se não houver nenhum arquivo ini presente, um será criado automaticamente para você usando os detalhes que você passar para FastDownload
.
Você pode adicionar quaisquer pares chave/valor adicionais ao arquivo de configuração que desejar. Quando você chama FastDownload.get
, passe extract_key
para usar uma chave diferente de data
para escolher um local para extrair.