輕鬆下載、驗證和擷取檔案
如果您想要向使用者提供資料集或其他檔案,並確保它們始終具有最新版本並且正確下載, 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
以外的金鑰來選擇要提取的位置。