2

変数をファイルに保存する方法を探しました (他の計算のために変数を永続化します)。

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] 

ありがとう。

4

2 に答える 2

0

より簡単な方法は、次のように使用する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]))

ほら!

于 2014-09-22T12:55:58.573 に答える
0

リストの例や他のほとんどの場合、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)
于 2014-09-22T13:07:43.907 に答える