【问题标题】:File extension naming: .p vs .pkl vs .pickle文件扩展名命名:.p vs .pkl vs .pickle
【发布时间】:2017-02-12 22:18:01
【问题描述】:

在读写pickle文件时,我注意到一些sn-ps使用.p其他.pkl和一些完整的.pickle。有没有一种最pythonic的方式来做到这一点?

我目前的观点是,没有一个正确的答案,任何一个都足够了。事实上,写入awesome.pklawesome.sauce 的文件名不会在运行pickle.load(open(filename, "rb")) 时产生影响。也就是说,文件扩展名只是一个约定,实际上并不影响底层数据。对吗?

奖励:如果我将 PNG 图像保存为 myimage.jpg 会怎样?这会造成什么破坏?

【问题讨论】:

    标签: python naming-conventions pickle


    【解决方案1】:

    扩展使没有区别,因为“Pickle 协议”每次都会运行。

    也就是说,无论何时运行 pickle.dumps 或 pickle.loads,对象都会根据 pickle 协议进行序列化/反序列化。

    (pickle协议是一种序列化格式

    pickle 协议是 python 特定的(并且有 几个版本)。它只是为用户自己重新使用数据而设计的 -> 如果您将腌制文件发送给碰巧拥有 不同版本 的 pickle/Python 的其他人,那么该文件可能不会正确加载,你可能无法用另一种语言(如 Java)对该腌制文件做任何有用的事情。

    所以,使用你喜欢的扩展,因为pickler忽略它们。

    JSON 是另一种更流行的数据序列化方式,它也可以被 其他语言 使用,不像 pickle - 但是它不直接迎合 python 和某些变量它不理解类型:/

    source如果你想了解更多

    编辑:虽然您可以使用任何名称,但您应该使用什么名称?

    • 1 正如@Mike Williamson 所述,pickle 文档中使用了 .pickle

    • 2 python 标准库 json 模块 加载以 .json 扩展名命名的文件。所以它会遵循 pickle 模块 会加载一个 .pickle 扩展。

    • 3 使用 .pickle 还可以最大限度地减少其他程序意外使用的可能性。

    .p 扩展名被其他一些程序使用,最著名的是 MATLAB 作为二进制运行时文件的后缀[来源:onetwo]。 一些冲突风险

    .pkl 被一些不起眼的窗口“迁移向导装箱单文件”[source]使用。 冲突风险极低

    .pickle 仅用于 python 酸洗[source]。 没有冲突的风险

    【讨论】:

    • 是的,这都是真的,哈利,但据我所知,我没有回答 OP 的原始问题。 OP 有一种强烈的预感——正确地——没有技术 理由来选择一种格式而不是另一种格式。但他想知道是否有更 Pythonic 的方式。换句话说,风格指南会推荐什么?我来这里是为了寻求建议。检查pickle docs,他们使用.pickle,但根据我的经验,我见过.p.pkl 更多。我在 PEP 中找不到任何明确谈论这个的内容。 :(
    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 2017-11-28
    • 1970-01-01
    • 2013-11-11
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多