2012-11-27 3 views
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] 

을 출력을 반환하는 중에 오류가 발생했습니다.

해시 가능하지 않은 메서드를 목록에 추가하여 오류가 발생했습니다. 올바른 버전 :

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

감사합니다.

+4

작품 완벽하게 정상적으로 : 귀하의 예를 들어 목록 – ThiefMaster

+0

잘 모르겠습니다. 이 목록을 얻기위한 코드는 여기에 게시하기에는 너무 길지만 일부 작업 후에 위의 상황에 있으며 오류가 발생하지만 내 목록은 다음과 같습니다. – dbonadiman

+1

@Dproof http : // sscce.org/ 게시 한 내용이 정상적으로 작동합니다. –

답변

0

간단한 방법은 다음과 같이 with, forenumerate을 사용하는 것입니다

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

잇함으로써 해결할! (의 만주십시오 "수정"#the 정말 추악한 그림자 나를 위해

수입 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) 
0

, 대부분의 사람들은, 내가 JSON 파일 형식을 사용합니다 변수`list`도 호출하여 내장`list`)
+0

당신은 _list_ 기능을 재정의하고 있습니다. 귀하가 옳은 OP – volcano

+0

@ volcano는 수정되었습니다. – heltonbiker