|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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',请问各位大神,这是为什么?代码如下:
内容存放:
- import pickle
- s = 'qw1ertyuiopqw2ertyuiopqw3ertyuiop'
- pickle_file = open('s_pkl.pkl','ab')
- for x in range(len(s)):
- if s[x] == 'w':
- pickle.dump(s[x:x+2],pickle_file)
- pickle_file.close()
复制代码
内容读取:
- import pickle
- f = open('s_pkl.pkl','rb')
- print(pickle.load(f))
- f.close()
复制代码
按照我的想法,s_pkl.pkl内应该存放了3个'w','w1','w2','w3'。
但是在文件提取中,只打印出来了'w1',即读取到了满足条件的第一个'w',也就是对第一次的pkl存放进行了成功读取,是不是代表我的想法错误。
即Python 的pickle.dump()方法,不能够对打开模式为'xb'的文件,实现内容的接续存放。
在热心帮助者‘冬雪雪冬’提供的方法中,给出了一种设置指定循环次数的方法,通过pickle.load()对打开的pickle_file文件,进行了连续的读取,最终实现了对存放内容的全部读取。代码如下:
- import pickle
- f = open('s_pkl.pkl','rb')
- for i in range(3):
- print(pickle.load(f))
- f.close()
复制代码
这表明了,通过循环对pkl文件进行连续的存放是可行的,但是我在文件内容的读取过程中出现了错误,导致只读取到了pkl文件中,第一次存放的数据。
可是对于不知道具体存放次数的pkl文件,将如何实现对全部内容的读取呢?
在同一个pkl文件中,不同时间存放的数据,通过pkl如何进行分别读取?
Python在对于连续进行的pkl文件存放,其内在机制是什么?
是存放了3个w
- import pickle
- f = open('s_pkl.pkl','rb')
- for i in range(3):
- print(pickle.load(f))
- f.close()
复制代码
|
|