2016-08-19 61 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