【问题标题】:how to save and retrive a list from a file in Python?如何在 Python 中保存和检索文件中的列表?
【发布时间】:2012-11-27 21:35:21
【问题描述】:

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

我找到了一些解决方案,例如: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] 

谢谢。

【问题讨论】:

  • 对我来说非常好用(但请通过调用你的变量 list 来“修复”#内置 list 真正丑陋的阴影)
  • 我不知道。我获取此列表的代码太长,无法在此处发布,但经过一些操作后,我处于上述情况,它给了我一个错误,但我确信我的列表看起来像这样
  • @Dproof sscce.org 你发布的内容很好。
  • 我已经发布了该问题的解决方案。正如你提到的,问题不在这里,而是在上面。

标签: python list data-persistence


【解决方案1】:

更简单的方法是像这样使用withforenumerate

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]))

等等!

【讨论】:

    【解决方案2】:

    对于您的示例列表以及大多数其他示例,我将使用 JSON 文件格式:

    导入 json

    lst = [['cccc',['asd','sdad','sdadas']],['cscc',['asd','sdad','sdadas']]]
    with open('list.json', w) as jsonout:
        json.dump(lst, jsonout)
    
    # and then
    with (open('list.json') as jsonin:
        lst = json.load(jsonin)
    

    【讨论】:

    • 您正在覆盖 list 函数 - 以及 OP
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多