2009-12-14 2 views
10

작은 응용 프로그램에서 다음 사전을 가지고 있다고 가정 해 봅시다.이름을 포함하여 변수를 파일에 씁니다.

dict = {'one': 1, 'two': 2} 

정확한 코드 줄을 dict 이름과 all로 파일에 쓰려면 어떻게해야합니까? 내가 할 수있는 파이썬 함수가 있나요? 아니면 먼저 문자열로 변환해야합니까? 그것을 변환하는 것은 문제가 아니지만 더 쉬운 방법 일 수 있습니다.

나는 그것을 할 수있는 문자열로 변환 할 필요가 없습니다. 그러나 나를 위해 이렇게하는 기능이 내장되어 있다면, 알고 싶습니다.

내가 파일에 쓸 싶은 것이, 그것을 명확하게하기 위해입니다

write_to_file("dict = {'one': 1, 'two': 2}") 
+2

아마도 * 왜 * 당신이 이것을하고 싶은지 조금 더 말할 수 있습니다. –

+0

죄송합니다, 아직 명확하지 않습니다. 임의의 문자열을 파일에 쓰는 법을 알고 싶습니까? –

+0

나는 dict 변수의 이름을 포함하여 파일에 전체 dict 라인을 작성한 후이 경우 'dict'입니다. 그것은 모두 27 자일 것입니다. – Orjanp

답변

37

repr 함수는 사용자의 dict의 정확한 정의 인 문자열을 반환합니다 (요소의 순서는 제외하고, dicts는 파이썬에서 순서가 지정되지 않음). 불행히도, 나는 자동으로 변수 이름을 나타내는 문자열을 얻는 방법을 말할 수 없습니다. 또한

import inspect 

mydict = {'one': 1, 'two': 2} 

source = inspect.getsourcelines(inspect.getmodule(inspect.stack()[0][0]))[0] 
print [x for x in source if x.startswith("mydict = ")] 

:

f = open('file.py', 'w') 
f.write('dict = ' + repr(dict) + '\n') 
f.close() 
+0

@bryan : 정말 미안 해요, 나는 실수로 파일에 글쓰기가 꽤 분명하다고 생각했습니다 ... 이상하게도, 그럴리 없습니다. –

+0

고마워, 나는 이런 식으로 끝내었다. 파일에 쓰는 것은 실제로 문제가되지 않았습니다. – Orjanp

14

사용 pickle

import pickle 
dict = {'one': 1, 'two': 2} 
file = open('dump.txt', 'w') 
pickle.dump(dict, file) 
file.close() 

다시

file = open('dump.txt', 'r') 
dict = pickle.load(file) 

편집을 읽을 수 : 내가 너의 질문을 잘못 읽은 것 같아, 미안 ...하지만 피클은 모두 똑같이 도울지도 모른다. :) 사전에

+0

그 것은 dict을 쓰지만 dict의 이름은 쓰지 않습니다. –

0

기본 캐릭터 라인 표현이 바로 것 같다 :

>>> a={3: 'foo', 17: 'bar' } 
>>> a 
{17: 'bar', 3: 'foo'} 
>>> print a 
{17: 'bar', 3: 'foo'} 
>>> print "a=", a 
a= {17: 'bar', 3: 'foo'} 

파이썬에서 변수는 단지 값 레이블이기 때문에 당신은 "변수 이름"에서 얻을 수 있는지 확실하지. this question을 참조하십시오.

4

당신은 할 수 있습니다 : 파일에 쓰기

>>> dict = {'one': 1, 'two': 2} 
>>> repr(dict) 
"{'two': 2, 'one': 1}" 

는 다른 파일 쓰기와 같은 꽤 표준 물건입니다 DICT의 내장 그림자하지 않도록하십시오 !

+0

감사합니다. 나는 딕트의 그림자를 생각하지 않았다. 할 일이 좀있어. – Orjanp

17

찾고 싶은게 뭔가요?

def write_vars_to_file(_f, **vars): 
    for (name, val) in vars.items(): 
     _f.write("%s = %s\n" % (name, repr(val))) 

사용법 :

>>> import sys 
>>> write_vars_to_file(sys.stdout, dict={'one': 1, 'two': 2}) 
dict = {'two': 2, 'one': 1} 
+2

좋은 물건, 이제 어떻게 다시 읽습니까? – gatopeich

+0

이 글은 오래된 글이지만,'_f'를 매개 변수 이름으로 사용하는 이유는 무엇입니까? 나는 특별히 '_'을 사용하는 것에 대해 묻고있다. 스타일 가이드 또는 개인적인 대회에 있습니까? –

0

당신은 단지 file에 라인을 작성하는 방법을 알고 싶어? 이 파일에 문자열을 작성해야합니다, 그리고

f = open("filename.txt", 'w') 

: 첫째, 당신이 파일을 열 필요가 당신은 각 행에 대해이 작업을 반복 할 수 있습니다

f.write("dict = {'one': 1, 'two': 2}" + '\n') 

을합니다 (+'\n'는 경우 줄 바꿈을 추가 원하는).예외가 발생하는 경우에도,

with open("filename.txt", 'w') as f: 
    f.write("dict = {'one': 1, 'two': 2}" + '\n') 
    ### repeat for all desired lines 

이 자동으로 파일을 닫습니다 :

f.close() 

당신은 또한 조금 더 영리하고 with가 사용할 수 있습니다

마지막으로, 당신은 파일을 닫아야합니다 .

그러나 이것이 당신이 묻는 바가 아닌 것 같습니다 ...

+0

정확합니다. 내가 할 수있는 파일에 글쓰기. :) – Orjanp

관련 문제