2017-07-14 38 views
1

读多腌制的项目文件。我正在尝试读取LIFO中的数据(后进先出)。由我保存的信息使用在Python 3.4和pickle.dump功能的文件末尾

替代,我想也许有一种方法,我可以只读过最后一个项目,假设有一个办法直接指向它。然后再次指向它并在阅读下一个项目之前将其从文件中删除。

提前致谢!

+1

你写过的东西,我们可以尝试改善?另外,你是否试图避免将整个文件读入内存(“只读最后一项”)? – pistache

+0

对不起,因为我想不出离开到达最后项目没有通过整个文件实际上去的我还没有写任何东西。 –

+0

您必须维护每个pickle开始的文件位置的索引,可能在第二个文件中。 – jasonharper

回答

0

你可以保持项目的索引和读取他们在一个新的秩序:

import pickle 
data = ["this", "is", "your", "data"] 
indices = [] # keep the index 
with open("file_name.p", "wb") as f: 
    for value in data: 
     indices.append(f.tell()) 
     pickle.dump(value, f) 

# you may want to store `indices` to files 
# and read it in again 
new_data = [] 
with open("file_name.p", "rb") as f: 
    for ap in indices[::-1]: 
     f.seek(ap) 
     new_data.append(pickle.load(f)) 
print(new_data) 
+0

感谢您的代码。它似乎工作。我只有一个顾虑,因为我需要能够做到这一点失去权力等保存到索引文件后,就意味着加载,追加和每一个和pickle.dump后保存? –

+0

是的。这只是一个列表,所以你也可以将它保存到pickle文件中,并在pickle.dump中进行更新。 – Huang

+0

好的非常感谢你的帮助! –