Pickle 未将数据保存到具有格式化字符串名称的文件中

Pickle is not saving data to a file with a formatted string name

我对下面代码的行为感到困惑。有两个问题;我不确定它们是否以某种奇怪的方式相关。

第一个问题比较重要。该代码应保存两个包含相同数据的文件。然而,test.pkl 大约是 79 kB,而另一个是空的。为什么文件创建后没有保存任何东西?

我注意到的第二个问题是,第二个文件被保存为类似 e-v-w1-n2-2020-12-13-19 的格式,没有任何文件扩展名。 .pkl 怎么了?

我在 Windows 10 上使用 Python 3.8 和 pickle 4.0。

import pickle
import numpy as np
import datetime

n = 100
z = np.zeros((n,n))
with open("test.pkl" , 'wb') as myfile:
    pickle.dump(z, myfile)

filename = "e-v-w%s-n%s-%s.pkl" % (1, 2, datetime.datetime.now().strftime("%Y-%m-%d-%H:%M"))
print(filename)
with open(filename, "wb") as outfile:
    pickle.dump(z, outfile, pickle.HIGHEST_PROTOCOL)

当我打印 filename 时,顺便说一下,.pkl 会正常显示。

Windows 文件路径中不允许使用冒号字符(“:”),例如 this post

您的 strftime 格式包含一个冒号,这使得该路径无法写入,并且可能也是冒号后面的字符(像 .pkl 扩展名一样糟糕的原因) 丢失。

运行 您的代码在 Unix 平台上按预期工作。只需更改您的 strftime 格式,使其与 Windows.

兼容