有没有一种方法可以在Python中拥有“最后已知”计数器,即使在服务器重启后也能存活?
我有一个Python脚本,按计划(由cron)启动。它以预定义格式读取文档ID的文件。我需要记住上次处理的文档ID,以便忽略所有之前的ID。
有没有一种方法可以在Python中拥有“最后已知”计数器,即使在服务器重启后也能存活?
我有一个Python脚本,按计划(由cron)启动。它以预定义格式读取文档ID的文件。我需要记住上次处理的文档ID,以便忽略所有之前的ID。
sqlite3
模块内置了 SQLite 支持。但是,看起来您只需要存储一个单一的 ID,因此一个简单的文件就足够了。我建议使用以下内容:import os
DATA_FILENAME = os.path.expanduser("~/document-counter.txt")
def update_document_id(new_id):
with open(DATA_FILENAME, "w") as fd:
fd.write(new_id + "\n")
def retrieve_document_id():
with open(DATA_FILENAME, "r") as fd:
return fd.readline().strip()
你可能需要更好的错误检查(例如,捕获如果文件不存在时抛出的异常等)。但这让你了解了解决方案可以多么简单。最好捕获异常(EAFP经常被认为比LBYL更符合Python风格),但如果你想显式检查文件是否存在,那么也可以以一种可移植的方式轻松实现:
if not os.path.exists(DATA_FILENAME):
print "No file found. Deal with it."
sqlite3.connect()
方法提供一个文件名,因此它基本上就像打开一个文件一样容易,只是您可以随后把SQL语句传递给它。shelve
没有任何问题。就我个人而言,我更喜欢纯文本文件或 SQLite 文件,因为它们在其他语言中更容易支持,但我完全理解 OP 没有将其指定为要求。他对跨平台解决方案的关注使我想到,也许跨语言的解决方案可能会吸引他。对于结构化数据,shelve
肯定比自己编写纯文本格式更好 - 当然,除非我需要存储 Python 类或类似对象(那么 shelve
更好)。 - CartrooConfigParser
这样的东西比shelve
更容易跨语言。 - Chris Morgan