2016-08-19 55 views
0

可以使用內置的pkgutil包來使用它的pkgutil.get_data來獲取與包一起打包的數據。使用緩存的Python包

我的情況有點不同。

我想允許一個獨立於平臺的方式來允許存儲由我的包完成的數據,但實際上並沒有在安裝時分發任何東西。

當數據比我們說的更早時,比如1天,當一個新的轉換完成時,它應該刷新這個緩存。

代碼可能會有所幫助:

import json 
from datetime import datetime 
from dateutil.relativedelta import relativedelta 

cache_path = "XXX/here" 
with open(cache_path) as f: 
    cached_data = json.load(f) 

def convert(value, from_type, to_type): 
    pair = from_type + "-" to_type 

    now = datetime.now() 
    too_old = (now + relativedelta(days=1)).isoformat() 
    if pair not in cached_data or too_old < cached_data[pair]['last_updated']: 
     cached_data[pair] = get_new_value(pair) 
     with open(cache_path, "w") as f: 
      json.dump(cached_data, f) 

    return value * float(cached_data[pair]['value']) 

那麼如何選擇cache_path

回答

0

內置tempfile模塊將幫助你在這裏。

import tempfile 
with tempfile.NamedTemporaryFile(delete=False) as cache_path_fh: 
    <do stuff> 

刪除/清理將不得不與delete=False手動完成,因爲你想要的文件後仍然保持文件句柄的範圍。

默認情況下,這些文件位於/tmp或系統的臨時目錄下,可以進行調整。請參閱docs

+0

問題是在/ tmp中它們會在重新啓動後被刪除。它不應該是一個tmp文件。那麼我們將在哪裏存儲它? – PascalVKooten

+0

由你決定。根據文檔,目錄路徑可以調整。通常,在Linux數據文件中,在/ opt或/ var/opt下或在正在運行的用戶家中。 Windows我不能說,用戶的「家」目錄也許。 – danny