鱼C论坛

 找回密码
 立即注册
查看: 2900|回复: 5

[已解决]Python中pickle模块的dump方法,与循环组合实现对满足条件的数据,进行.pkl存储。

[复制链接]
发表于 2020-2-15 22:28:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yeyu0142 于 2020-2-16 11:54 编辑

如下例,我想将字符串s中的'w',利用for循环设置判断条件,将字符串中所有的'w'存放在s_pkl.pkl之中。为区别三个'w',在每个'w'后加一个数字,并在存放时一并存放。
因为pickle_file的打开模式为'ab',所以我的想法是,在循环中只要满足条件,就在s_pkl.pkl后添加满足条件的内容,实现将所有满足条件内容依次进行pkl存放,不知道可行不可行?
而下面代码结果在读取存放内容时,只读取到了'w1',即满足条件的第一个'w',请问各位大神,这是为什么?代码如下:
内容存放:
  1. import pickle
  2. s = 'qw1ertyuiopqw2ertyuiopqw3ertyuiop'
  3. pickle_file = open('s_pkl.pkl','ab')
  4. for x in range(len(s)):
  5.     if s[x] == 'w':
  6.         pickle.dump(s[x:x+2],pickle_file)
  7. pickle_file.close()
复制代码


内容读取:
  1. import pickle
  2. f = open('s_pkl.pkl','rb')
  3. print(pickle.load(f))
  4. f.close()
复制代码

按照我的想法,s_pkl.pkl内应该存放了3个'w','w1','w2','w3'。
但是在文件提取中,只打印出来了'w1',即读取到了满足条件的第一个'w',也就是对第一次的pkl存放进行了成功读取,是不是代表我的想法错误。
即Python 的pickle.dump()方法,不能够对打开模式为'xb'的文件,实现内容的接续存放。

在热心帮助者‘冬雪雪冬’提供的方法中,给出了一种设置指定循环次数的方法,通过pickle.load()对打开的pickle_file文件,进行了连续的读取,最终实现了对存放内容的全部读取。代码如下:
  1. import pickle
  2. f = open('s_pkl.pkl','rb')
  3. for i in range(3):
  4.     print(pickle.load(f))
  5. f.close()
复制代码

这表明了,通过循环对pkl文件进行连续的存放是可行的,但是我在文件内容的读取过程中出现了错误,导致只读取到了pkl文件中,第一次存放的数据。
可是对于不知道具体存放次数的pkl文件,将如何实现对全部内容的读取呢?
在同一个pkl文件中,不同时间存放的数据,通过pkl如何进行分别读取?
Python在对于连续进行的pkl文件存放,其内在机制是什么?
最佳答案
2020-2-15 22:37:41
是存放了3个w
  1. import pickle
  2. f = open('s_pkl.pkl','rb')
  3. for i in range(3):
  4.     print(pickle.load(f))
  5. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-15 22:37:41 | 显示全部楼层    本楼为最佳答案   
是存放了3个w
  1. import pickle
  2. f = open('s_pkl.pkl','rb')
  3. for i in range(3):
  4.     print(pickle.load(f))
  5. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-15 22:40:33 | 显示全部楼层
多次load才能依次把存入的东西依次取出,一次是不能把多次存入的东西取出的。要么你创建一个变量,在接受完所有的字符后一次性dump,就能一次load。要么你就多次load把所有的字符取出。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-16 11:55:53 | 显示全部楼层

可是对于不知道具体存放次数的pkl文件,将如何实现对全部内容的读取呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-16 11:58:59 | 显示全部楼层
hrp 发表于 2020-2-15 22:40
多次load才能依次把存入的东西依次取出,一次是不能把多次存入的东西取出的。要么你创建一个变量,在接受完 ...

在同一个pkl文件中,不同时间存放的数据,通过pkl如何进行分别读取?是要按照存放顺序进行依次读取吗?再进行依次判别吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 13:18:23 | 显示全部楼层
yeyu0142 发表于 2020-2-16 11:55
可是对于不知道具体存放次数的pkl文件,将如何实现对全部内容的读取呢?

作为数据文件,你应当是知道具体存储了什么数据,不然取到一堆数据,也无法使用。
所以pickle只能一个一个的数据读取。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-3 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表