[파이선 배우기] 4. 영속성 – 파일에 데이터 저장하기

Posted on Updated on

프로그램은 정보를 남긴다

파일 출력중 예외는 잘 다뤄야 한다

파일을 열었다. 예외가 났다. 파일을 닫지도 못한채. 이 경우 문제가 발생한다. 이 것들을 해결해 주기 위해서 try 문을 filnally 까지 확장해야한다.

with 를 사용해서 파일을 다루면 됩니다


with를 쓰면 코드량이 크게 줄어든다! 닫을 필요조차 없어진다. 파일을 다룰 땐 with 를 쓰자

before

try:
    data = open('output.txt', 'w')
    print('hello uartis', file=data)
except IOError as err:
    print('error: ' + str(err))
finally:
    if 'data' in locals():
        data.close()

after

try:
    with open('output.txt', 'w') as data      
    # with를 사용함으로써 자동으로 close 에 대한 걱정은 없어진다
        print('hello uartis', file=data)
except IOError as err:
    print('error: ' + str(err))

좋구먼 두 개를 동시에 열 때 사용해도 좋다.

try:
    with open('output.txt', 'w') as data, open('uartis.txt', 'w') as uartisData
        print('hello uartis', file=data)
except IOError as err:
    print('error: ' + str(err)) 

기본 값 인자를 사용할 때의 팁

# 함수의 선언
def print_something(argument_1 = 0):
    print(argument)

# 함수의 사용에서 기본 값 인자를 사용하려면
# 선언과 같은 이름의(위에서는 argument_1) 을 사용해야 한다
print_something(argument_1 = 100)

#IDLE 툴은, print_something( 이라고 치는 순간, 힌트를 제공합니다.

피클링


why 피클링?

데이터를 파일에 저장하고, 다시 읽어오는 메커니즘은 흔히 사용되는 패턴이다. 이 패턴을 정형화 해 둔 것을 가져다 쓰기만 하면 그만이다. 그래서 그냥 피클링을 쓴다. 리스트건 스트링이건 데이터 타입에는 상관 없이 저장하고 다시 불러올 수 있다는 것이다. 이거 정말 편하다!!!! 와우!!

저장하기 : dump
불러오기 : load

import pickle

try:
    with open('uartis.txt', 'wb') as uartis_out:
        pickle.dump([0,1,2,[3,4,5],'uartis'], uartis_out) # 파일에 피클 저장하기
except pickle.PickleError as perr:                        # 피클 에러 처리 구문
    print('Pickle Error : ' + str(perr))

try:
    with open('uartis.txt', 'rb') as uartis_in:          # 파일을 피클 리딩용으로 열기
        pickle_input = pickle.load(uartis_in)            # 피클을 로드하기
        print(pickle_input)
except pickle.PickleError as perr:
    print('Pickle Error : ' + str(perr))


#결과
'''
>>> 
[0, 1, 2, [3, 4, 5], 'uartis']
>>>
''' 

배워가는 메서드들


스트링인스턴스에.strip() 
# 문자열 앞 뒤에 있는 불필요한 공백을 지운다
리스트인스턴스에.append(데이터를)
# 리스트 인스턴스에 데이터 인자를 건네주면 리스트 인스턴스는 이를 추가한다
elif # else if를 뜻한다

outputFile = open('output.txt', 'w') # 쓰기 모드로 파일 열기
# w : 처음부터 덮어쓰기
# a : 가장 뒤부터 추가하기
# w+ : 파일의 내용을 안지우면서 읽고 쓰기
print('행복물건개발자의 파일 출력', file=outputFile)
outputFile.close() # 닫기

finally: # 평소에 항상 해야 하는 문장을 그냥 이쪽으로 옮기면 된다 locals() # 현재 범위에서 사용할 수 있는 이름들을 반환함 exception IOError as err: # 예외 객체에 이름을 준다 print(‘File error: ‘ + str(err)) str(객체) # 문자열로 변환


* 본 글은 ‘헤드퍼스트 파이썬’ 한빛미디어의 책을 학술 목적으로 인용하였습니다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중