2015-01-02 2 views
4

목록 점수 = [1,2,3,4,5]라고하면 프로그램이 실행되는 동안 변경됩니다. 어떻게하면 파일에 저장하여 다음에 프로그램이 실행될 때 변경된 목록을 목록 유형으로 액세스 할 수 있습니까?목록을 파일로 저장하고 목록 유형으로 읽는 방법?

score=[1,2,3,4,5] 

with open("file.txt", 'w') as f: 
    for s in score: 
     f.write(str(s) + '\n') 

with open("file.txt", 'r') as f: 
    score = [line.rstrip('\n') for line in f] 


print(score) 

하지만이 정수 문자열을하지되는 목록의 요소 결과 :

이 나는 ​​노력했다.

+3

는 소리. – Alec

답변

3

필자는 피클을 사용하고 싶지 않았기 때문에 테스트 중에 텍스트 파일을 열고 내용을 쉽게 변경할 수 있기를 원했습니다. 따라서 나는 이것을했다 :

score = [1,2,3,4,5] 

with open("file.txt", "w") as f: 
    for s in score: 
     f.write(str(s) +"\n") 

with open("file.txt", "r") as f: 
    for line in f: 
    score.append(int(line.strip())) 

그래서 파일의 항목은 문자열로 파일에 저장되었지만 정수로 읽혀진다.

+0

좋습니다. 하지만 당신도이 사건을 피클 할 수 있어요. –

18

pickle 모듈을 사용할 수 있습니다. 파이썬 문자열 표현으로 개체를 변환 : 이 모듈은 두 가지 방법,

  1. 산세 (덤프) 있습니다.
  2. 축약 해제 (로드) : 저장된 문자열 표현에서 원본 개체 검색.

https://docs.python.org/3.3/library/pickle.html 코드 :

>>> import pickle 
>>> l = [1,2,3,4] 
>>> with open("test.txt", "wb") as fp: #Pickling 
... pickle.dump(l, fp) 
... 
>>> with open("test.txt", "rb") as fp: # Unpickling 
... b = pickle.load(fp) 
... 
>>> b 
[1, 2, 3, 4] 
1

pickle 및 기타 직렬화 패키지 작업. 그러면 파일을 .py에 쓰고 가져 와서 가져올 수 있습니다.

>>> score = [1,2,3,4,5] 
>>> 
>>> with open('file.py', 'w') as f: 
... f.write('score = %s' % score) 
... 
>>> from file import score as my_list 
>>> print(my_list) 
[1, 2, 3, 4, 5] 
+0

이것은 좋은 해결책이 아닙니다. 데이터와 코드를 명확하게 구분하십시오. 데이터 _as_ 코드를 저장하지 마십시오. –

+0

@ Rawing : 개인적으로, 나는 산 세척이나 기타 방법을 사용하는 것을 선호하지만, SO는 어떻게 할 수 있는지 물었고, 그것을 할 수있는 유효한 방법입니다. 당신이 받아 들인 대답을 보았을 때,리스트를 문자열로 저장하는 것은 어떤 경우에만 작동합니다 ('1,2,3' 같은 간단한 엔트리가있는 곳). 내 답변이 가장 빠른 접근 방식을 제공 할 것으로 기대합니다. 다시 말하지만, 속도가 필요하지 않은 경우 산 세척을 사용하고 속도가 필요할 때는 원시 목록 객체를 사용합니다. '가져 오기'를 사용하여 데이터를 읽는 데 몇 가지 위험이 있지만, 필요한 경우 처리 할 수 ​​있습니다. 그래서 우리는 동의하지 않을 것에 동의 할 수 있습니다. –

0

당신이 피클을 사용하지 않으려면, 당신은 텍스트로 목록을 저장 한 후 평가할 수 :

data = [0,1,2,3,4,5] 
with open("test.txt", "w") as file: 
    file.write(str(data)) 

with open("test.txt", "r") as file: 
    data2 = eval(file.readline()) 

# Let's see if data and types are same. 
print(data, type(data), type(data[0])) 
print(data2, type(data2), type(data2[0])) 

[0, 1, 2, 3, 4, 5] 클래스 '를 당신은`pickle` 모듈에 관심이있을 수 같은 목록 '클래스'INT '는

[0, 1, 2, 3, 4, 5] 클래스'목록 '클래스'INT '

관련 문제