gpt4 book ai didi

python - 为什么 pickle.dump 不写入文件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:24 25 4
gpt4 key购买 nike

我目前有一个运行了几天的项目。由于某些执行步骤可能会出现错误,我选择了关键步骤以便能够在正确的步骤重新启动脚本(因此我不必再次执行最终超过 24 小时的工作)。

我用 pickle 存储的一件事是列表 steps。此列表包含成功完成的每个步骤。用于再次启动脚本时跳过步骤。

问题是 pickle 在我切换模块后似乎没有更新它。

代码

主脚本.py

import subscript

def set_status(mysql_script_instance_id, status, state=None):
# [...]
# update status in database (works as expected)
# [...]

if state is not None:
with open("state.pickle", "wb") as f:
pickle.dump(state, f)
logging.debug("Dumped pickle. steps_done: %s" % state['steps_done'])
logging.info(status)

下标.py

import mainscript
[...]
logging.info("%s finished." % (step.__name__))
self.state['steps_done'].append(step.__name__)
[...]
logging.debug("self.state['steps_done'] = %s" % self.state['steps_done'])
mainscript.set_status(self.mysql_script_instance_id, "step xy done", self.state)

pickleviewer

#!/usr/bin/env python
import pickle
import pprint
state = pickle.load(open("state.pickle", "rb"))
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(state)

我尝试过的

我得到了我所期望的所有日志消息:

2014-04-03 08:23:07,727 INFO: step1 finished.
2014-04-03 08:23:07,728 DEBUG: self.state['steps_done'] = ['Fetch recordings', 'preparation', 'step1']
2014-04-03 08:23:07,927 DEBUG: Dumped pickle. steps_done: ['Fetch recordings', 'preparation', 'step1']

但是当我查看 pickle 文件时,我得到:

{   [...]
'steps_done': ['Fetch recordings', 'preparation'],
[...]}

可能是什么错误?我该怎么做才能找到错误?

(如果 open 不起作用,我会得到一个异常,对吗?)

最佳答案

使用绝对文件路径打开你的 pickle 文件;通过使用相对路径,您现在正在当前工作目录中编写一个 pickle 文件。

您可以根据 __file__ 全局路径在与脚本相同的位置写入:

import os

here = os.path.dirname(os.path.abspath(__file__))

然后使用

with open(os.path.join(here, "state.pickle"), "wb") as f:

在同一目录中创建 pickle 文件的绝对路径。

关于python - 为什么 pickle.dump 不写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22829763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com