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

関連する問題