Skip to main content
 首页 » 编程设计

python之如何在 Python 中保存和检索文件中的列表

2025年05月04日8kuangbin

我搜索了一种将变量保存到文件中的方法(使它们在其他计算中持久化)。

我找到了一些解决方案,例如:https://stackoverflow.com/a/899199/1846113 但是当我在如下列表中实现它时:

import pickle 
 
list = [['cccc',['asd','sdad','sdadas']],['cscc',['asd','sdad','sdadas']]] 
pickle.dump(list, outfile) 

它给我这个错误

 File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1370, in dump 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 224, in dump 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 600, in save_list 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 615, in _batch_appends 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 600, in save_list 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 615, in _batch_appends 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 286, in save 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 739, in save_global 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 811, in whichmodule 
TypeError: unhashable type: 'list' 

有人知道问题出在哪里吗? 或者其他解决方案?


编辑:有解

问题是我在创建列表时出错了。 我会把它贴出来(这样你就可以笑了)并避免这个愚蠢的错误: 我通过使用(丑陋的)函数处理列表的某些元素来创建列表:

def process_element(doc): 
    processed_value = do_something(doc.pop()) 
    return [doc.pop, processed_value]  

正如你们中的一些人已经注意到的,我在返回输出时出错了:

[doc.pop, processed_value] 

我在列表中添加了一个不可散列的方法,但出现了错误。 正确的版本是:

def process_element(doc): 
    processed_value = do_something(doc.pop()) 
    return [doc.pop(), processed_value]  

谢谢。

请您参考如下方法:

更简单的方法是像这样使用with、for 和enumerate:

with open('input.txt', 'r') as f, open('output.txt', 'w') as o: 
    for numline, line in enumerate((line.split() for line in f), start=1): 
        # process line elements by using line[0] line[1]... 
 
    # When you're done, you can write results in an output file like this 
    # (add a loop if needed): 
    o.write("%s %s\n" % (results[0], results[1])) 

瞧瞧!