【问题标题】:Python pickle modulePython泡菜模块
【发布时间】:2021-05-22 14:01:40
【问题描述】:

我没用,但我想我听说 pickle 模块在文件中保留了数据结构。所以我想尝试一下,但我的代码出错了 这是我的代码:

import pickle

with open("test.txt", "w") as f:
    pickle.dump(12.3, f)

with open("test.txt", "r") as f:
    x = pickle.load(f)

print(x)

每当我运行此代码时都会出错,有人可以告诉我为什么我使用 python 3.9.5

【问题讨论】:

  • 你需要读写二进制。试试"wb""rb"。在你打开的
  • 好的,这样可以吗?
  • 但是.txt文件不是二进制文件
  • pickle 不是以文本形式写入,而是以二进制形式写入 - 无论文件名如何。您可以使用dumps 将其视为字节数组并将其写入文本文件,但这不会增加任何值。试试吧
  • 所以如果我写f = open("test.txt", "rb") 然后o = f.read() 为什么会出错

标签: python module pickle


【解决方案1】:

正如其他人评论的那样,您需要使用'wb''rb' 以二进制模式与您的文件交互。此外,由于您的文件是二进制文件而不是文本文件,因此最好不要使用 .txt 扩展名;使用.pickle 扩展是惯例。其实现如下所示:

import pickle
    
with open('data.pickle', 'wb') as f:
    pickle.dump(12.3, f)
    pickle.dump([1, 2, 3], f)

with open('data.pickle', 'rb') as f:
    x = pickle.load(f)
    print(f'{x}, of type {type(x)}')
    y = pickle.load(f)
    print(f'{y}, of type {type(y)}')

【讨论】:

  • 好的,但我在一本 2.7 版的 Python 书中看到,它适用于他们使用 r 和 w 模式
  • 这可能只是 python 2 的一个奇怪特性,最好坚持使用 python 3
  • 是的,实际上当我买了一本 python 书时,我第一次接触到编程,当时我 11 岁,我之前没有电脑,所以我只是买了一本 python 书,但我不知道版本是python 2.x,所以我经常对python 2中存在的长整数感到困惑,但python 3中没有,但书中对事物的解释很好,就像函数一样,我稍后会学习的例外
  • 强烈推荐 youtube 上的 'sentdex',如果你热衷于学习,他会制作很棒的 python 视频
  • 好的,我稍后会查看他的频道
【解决方案2】:
`
import pickle
import os
os.chdir("C:\\Users\\user\\Desktop")
f = open("test.txt", "wb")
data = 12.3
pickle.dump(data, f)
pickle.dump([1, 2, 3], f)
f.close()
f = open("test.txt", "rb")
x = pickle.load(f)
print(x)
print(type(x))
y = pickle.load(f)
print(y)
print(type(y))
f.close()
`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2013-09-22
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多