[Python]리스트, 딕셔너리 메모장에 저장,불러오기

반응형
    반응형

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

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

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

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

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

     

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

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

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

     

     

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

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

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

     

    ex

     

    메모장에 넣어봅시다.

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

     

    with open('sp500.txt','w',encoding='UTF-8') as f:
        for name in ex:
            f.write(name+'\n')

     

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

     

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

    첫번째는 encoding 입니다. 

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

    encoding을 지워보겠습니다.

     

    with open('sp500.txt','w') as f:
        for name in ex:
            f.write(name+'\n')

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

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

     

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

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

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

     

    with open('sp500.txt','w') as f:
        for name in ex:
            f.write(name)

     

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

     

     

    딕셔너리 메모장에 저장

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

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

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

     

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

     

    test_dict

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

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

     

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

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

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

     

     

    불러오기

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

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

    1. readline()
    2. readlines
    3. read

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

     

    1.readline()

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

     

    f = open('./sp500.txt','r')
    line = f.readline()
    print(line)
    f.close()

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

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

     

    f = open('./sp500.txt','r')
    while True:
        line = f.readline()
        if not line : break
        print(line)
    f.close()

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

     

    2. readlines

    이번엔 readlines 함수입니다.

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

     

    f = open('./sp500.txt','r')
    lines = f.readlines()
    f.close()
    lines

     

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

     

     3. read

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

    f = open('./sp500.txt','r')
    data = f.read()
    f.close()
    data

     

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

     

    오류

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

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

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

     

     

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

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

     

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

     

     

    관련포스팅

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

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

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

     

     

    'Python > 기초' 카테고리의 다른 글

    [Python] conda 기본 명령  (0) 2021.04.24
    [Python] Set  (0) 2021.04.18
    문자열 포맷 출력  (0) 2021.03.31
    딕셔너리 key 변경하기  (0) 2021.03.27
    [Python] Range, Enumerate  (0) 2021.03.17

    댓글

    Designed by JB FACTORY

    ....