파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

리스트나 딕셔너리를 메모장에 저장하는 방법에 대해 설명하겠습니다.

데이터를 저장은 해야 하는데 엑셀에 하기엔 너무 무겁고 그렇다고 피클로 하면 데이터를 불러올 때마다

파이썬을 실행시켜야 하는데 이럴 때 가볍게 저장할 수 있는 곳이 메모장인 것 같습니다.

메모장에 출력 결과를 넣는 이유는 빠르게 저장할 수 있고 코딩도 간편합니다.

스피드가 필요할 땐 아주 적합합니다.

하지만, 많은 양의 데이터를 저장하기에는 조금 안 좋습니다. 정리가 안되서인데요. 

메모장은 최소한의 기능만 있어서 데이터 자체가 복잡해지면 정리가 불가능합니다. 

정리정돈이 필요한 데이터인 경우 파이썬으로 미리 정리하셔서 엑셀에 저장하는 걸 추천합니다. 

리스트를 메모장에 저장하기

리스트 안에 있는 원소들을 하나씩 저장하는 방법입니다.

먼저 준비한 리스트는 S&P500 종목명 리스트입니다. ex라 하겠습니다.

ex
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

메모장에 넣어봅시다.

with open을 쓰면 간단하게 메모장에 저장할 수 있습니다.

with open('sp500.txt','w',encoding='UTF-8') as f:
    for name in ex:
        f.write(name+'\n')
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

이렇게 저장을 했습니다. 아주 간단합니다.

메모장에 저장을 할 때 조심해야 할 것이 두 가지가 있는데

첫번째는 encoding 입니다. 

파이썬은 기본이 UTF-8 이 아니어서 오류가 생깁니다. 

encoding을 지워보겠습니다.

with open('sp500.txt','w') as f:
    for name in ex:
        f.write(name+'\n')
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

encoding을 하지 않으면 위와 같이 UnicodEncodeError가 뜹니다.

영어권이 아닌 이상 왠만하면 enocding을 항상 붙이는 것이 좋습니다.

두번째는 한줄 띄기입니다.

name 뒤에 '\n' 을 붙여놨습니다. 

이걸 하지 않으면 메모장에서는 한줄을 띄지 않습니다. 

with open('sp500.txt','w') as f:
    for name in ex:
        f.write(name)
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

줄 띄어쓰기를 하지 않아서 어디가 시작이고 끝인지 알 수 없게 됩니다.

딕셔너리 메모장에 저장

딕셔너리에 있는 내용을 딕셔너리처럼 메모장에 넣어봅시다.

리스트처럼 원소를 가져오면 바로 저장하는 방식으로는 딕셔너리 저장을 할 수가 없습니다.

문자열로 형태를 만들어 저장하는 방법으로 가야합니다.

준비한 딕셔너리는 S&P500 의 코드와 종목명으로 구성된 딕셔너리입니다.

test_dict
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

이 형태 그대로 가지고 가야합니다.

f-string을 이용하겠습니다.

딕셔너리 내용을 그대로 가져올 수 있습니다.

with open('sp500.txt','w',encoding='UTF-8') as f:
    for code,name in test_dict.items():
        f.write(f'{code} : {name}\n')
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

메모장에 저장할 때는 문자열로 만들어놓으면 왠만하면 다 저장됩니다.

그 특징을 잘 이용하면 딕셔너리뿐만 아니라 다른 출력결과도

위와 같은 방식으로 하면 다양한 형태(그래봤자 문자열 종류지만)로 저장할 수 있습니다.

불러오기

이제 다시 메모장에 있는 내용을 파이썬으로 불러오겠습니다.

불러오는 방법은 세가지가 있습니다. 

  1. readline()
  2. readlines
  3. read

모두 문자열을 불러오겠으나 약간 출력하는 방식이 다릅니다.

1.readline()

readline은 하나씩 출력하는 방식입니다.

f = open('./sp500.txt','r')
line = f.readline()
print(line)
f.close()
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

위와 같이 하면 첫줄만 출력이 됩니다.

모든 줄이 나오게 하고 싶다면 while을 이용합니다.

f = open('./sp500.txt','r')
while True:
    line = f.readline()
    if not line : break
    print(line)
f.close()
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

하나씩 해서 모든 줄이 나왔습니다.

2. readlines

이번엔 readlines 함수입니다.

각 줄을 리스트에 담아줍니다.

f = open('./sp500.txt','r')
lines = f.readlines()
f.close()
lines
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

리턴이 리스트이지만 \n 까지 가져오기 때문에 약간 번거로운 부분이 있긴합니다.

 3. read

read는 파일 내용 전체를 문자열로 출력해줍니다.

f = open('./sp500.txt','r')
data = f.read()
f.close()
data
파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

하나도 빠짐없이 모두 하나의 문자열으로 나오게 됩니다.

오류

저장할 때도 인코딩을 했듯이 불러오기를 할 때도 encoding을 해야할 수도 있습니다. 

이건 무조건은 아니라서 위에 내용에 넣지는 않았지만

메모장의 내용을 불러오기 위해 open을 요청하면 다음과 같이 오류가 뜰 수도 있습니다. 

파이썬 메모장 데이터 저장 - paisseon memojang deiteo jeojang

코덱을 내 맘대로 할 수는 없고 이럴 때는 다음처럼 encoding='UTF8' 을 넣어주면 됩니다.

f = open('./sp500.txt','r',encoding='UTF8')

리스트와 딕셔너리를 메모장에서 저장하고 불러오는 방법을 알아보았습니다.

관련포스팅

[Python/기초] - 문자열 포맷 출력

[Python/기초] - [Python] while 반복문 쓰기

[Python/기초] - [Python] 문자열(string) 다루기