Python中ab+模式为何不支持read()?rb、rb+模式可正常工作
问题分析与解决方案
用ab+模式打开文件时,文件指针默认会定位到文件末尾,这时候直接调用pickle.load()会因为没有可读数据立刻触发EOFError,导致你看不到任何已存储内容,看起来像是无法正常运行。
你需要先将文件指针移到文件开头,才能读取已有的数据,修正后的代码如下:
import pickle myfile = open(r'student_data.txt', 'ab+') # 将文件指针移到文件开头,才能读取已存储的数据 myfile.seek(0) data = {} try: while True: data = pickle.load(myfile) print(data) except EOFError: myfile.close()
补充说明:
ab+模式确实会保留原有数据且支持读写,核心问题是你忽略了文件指针的初始位置。- 若后续向文件写入新的pickle数据后需要再次读取,需再次调用
seek(0)将指针移回开头。
内容的提问来源于stack exchange,提问作者TheOneAboveAll
相关产品推荐
相关产品推荐

