如何为腌制对象添加日期戳

时间:2016-05-16 19:25:40

标签: python pickle

我有一个脚本可以在线获取某些信息并将其存储在列表中。我想保留列表以备将来执行脚本,然后在一段时间后(比如说3天)再次在线检索信息,以防万一它已经过时了。我的理解是我可以挑选清单(但如果有更明智的方式存储它,请告诉我 - 编辑:我应该使用搁架还是json?)。

我的主要问题是:存储泡菜日期和时间的最佳和最惯用的方法是什么,然后评估是否过了3天?

3 个答案:

答案 0 :(得分:4)

完全避免必须存储和管理单独的文件对象以跟踪时间戳的方法是使用os.path.getmtime()来获取linux记录的日期修改时间戳,以便刷新您正在刷新的列表/文件。

例如:

import os
import datetime
import time
threshold = datetime.timedelta(days=3) # can also be minutes, seconds, etc.
filetime = os.path.getmtime(filename) # filename is the path to the local file you are refreshing
now = time.time()
delta = datetime.timedelta(seconds=now-filetime)
if delta > threshold:
    # do something

答案 1 :(得分:0)

以下是存储来自httpbin.org的一些数据并将数据存储在pickle文件中的示例。

在此示例中,时间戳是注册表中的密钥。

import json
import pickle
from datetime import datetime
from urllib.request import urlopen


url = "https://httpbin.org/ip"

with open('./dump_data.pkl', 'wb') as db:
    data = json.loads(urlopen('https://httpbin.org/ip').read())
    date = datetime.now().timestamp()
    pickle.dump(db, {date: data})

答案 2 :(得分:0)

所以,这只是与其他答案略有不同,但我认为是一个很好的答案。 如果您将datetime对象与单独的dump存储在一起,则可以独立于数据进行读取。如果您的数据很大,这很重要。下面,我展示检查datetime元数据以查看它是否在过去三天内被转储,如果没有,那么它将读取数据。

>>> import pickle
>>> import datetime 
>>> d = datetime.datetime.now()
>>> w = (1,2,3)   
>>>
>>> with open('foo.pkl', 'wb') as f:
...     pickle.dump(d, f)
...     pickle.dump(w, f)
... 
>>>

现在等三天......

>>> import pickle
>>> import datetime
>>>
>>> with open('foo.pkl', 'rb') as f:
...     d_ = pickle.load(f)
...     if datetime.datetime.now() - d_ >= datetime.timedelta(3):
...         w_ = pickle.load(f)
...     else:
...         w_ = None
... 
>>> d_
datetime.datetime(2016, 5, 17, 6, 57, 37, 752703)
>>> w_
(1, 2, 3)
>>>