轻松下载、验证和提取档案
如果您想要向用户提供数据集或其他档案,并确保它们始终具有最新版本并且正确下载, fastdownload
可以提供帮助。
使用点:
pip install fastdownload
...或使用 conda:
conda install -c fastai fastdownload
您可能想要使用fastdownload
的情况是,您有一个或多个 URL 指向您想要提供的某些存档,并且您希望确保您的用户正确下载这些存档、拥有最新版本,并且这很容易尽可能让他们访问这些档案中的信息。
您的用户只需调用一个方法FastDownload.get
并传递所需的 URL,该 URL 将被下载并提取到您选择的目录中。返回提取文件的路径。如果该 URL 已被下载,则将自动使用缓存的存档或内容。但是,如果存档的大小或哈希值与应有的不同,则会通知用户,并下载新版本。
将来,您可能想要更新一个或多个档案。当您这样做时, fastdownload
将根据您更新的文件大小和哈希信息检查他们下载的档案,以确保您的用户拥有最新版本。
例如, fastai
使用fastdownload
提供对深度学习数据集的访问。 fastai
用户可以使用单个命令下载并提取它们,并使用返回值来访问文件。这些文件会自动放置在用户主目录中.fastai
文件夹的适当子目录中。如果数据集更新,用户下次使用该数据集时会收到通知,并自动下载并提取最新版本。
当您的用户下载存档时, fastdownload
会自动将其保存到目录中,检查大小和哈希是否匹配,然后提取内容。下载和解压的最小用法是:
from fastdownload import FastDownloadd = FastDownload()path = d.get('https://...')
此后, path
将包含提取的文件所在的路径。默认情况下,存档保存到{base}/archive
,并提取到{base}/data
。 {base}
默认为~/.fastdownload
。如果下载的存档的根目录中有多个文件或文件夹,则会在data
中为内容创建一个新文件夹。
使用download
来下载 URL 而不解压它,而不是使用get
,或者extract
来解压 URL 而不下载它(假设它已经下载到archive
目录)。所有这些方法都接受一个force
参数,该参数将下载/提取存档,即使它已经存在。
您可以通过将它们传递给FastDownload
来更改任何或所有base
路径、 archive
和data
路径:
d = FastDownload(base='~/.mypath', archive='下载', data='提取')
您可以使用rm
删除缓存的存档文件和/或提取的内容:
d.rm('https://...')
fastdownload
会将文件download_checks.py
添加到您的 Python 模块,其中包含档案的文件大小和哈希值。该文件与您选择的模块位于同一目录中,例如:
d = FastDownload(模块=fastai.some_module)
然后使用update
创建或更新 URL 的大小和哈希值:
d.update('https://...')
现在,您会发现fastai.some_module
所在的同一目录中有一个名为download_checks.py
的文件,其中包含一个 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
以外的密钥来选择要提取的位置。