본문 바로가기
Python

[Python 기초] 파이썬 파일 다루기 - pickle 모듈 (dump, load) 와 with 으로 파일 닫기

by dev수니 2021. 4. 5.
반응형

 

 

전 포스팅에서는 write() 함수를 사용해서 파일을 출력했다.

하지만 write() 함수는 문자열만 출력할 수 있기 때문에 다른 타입의 데이터를 출력하려면 pikcle모듈을 사용해야한다.

 

이번 시간에는 pickle 모듈에 대해 알아보고 close()함수를 쓰지 않고도 자동적으로 파일을 닫아주는 명령어인 with에 대해 알아보자.

 

 


 

 

 1  pickle 모듈

 

 

텍스트 파일로 저장할 때 사용하는 모듈이다. 다양한 자료형을 파일로 저장한다.

 

pickle로 데이터를 저장하고 불러올 때는 파일을 바이트 형식으로 읽거나 쓴다.  ex) 'wb', 'rb'

파일명.bin 으로 이진파일로 사용하는 것이 좋으며 import 후 사용한다.

 

 

pickle 모듈내에는 데이터를 파일내에 저장하는 함수인 dump() 와 저장된 내용을 읽어오는 함수인 load()가 있다. 사용방법을 다음과 같다.

dump(데이터, 파일)   # 데이터를 파일내에 저장하는 함수
load(파일)         # 파일을 읽어오는 함수

 

 

 

 

다음은 pickle 모듈을 이용하여 여러 타입의 데이터를 입력시킨 예제이다.

1
2
3
4
5
6
7
8
9
10
11
from pickle import *
 
= open("byte_fule.bin",'wb')
 
dump('hello world', f)   # <class 'str'>
dump(1234,f)             # <class 'int'>
dump(3.14,f)             # <class 'float'>
dump([1,2,3,4,5],f)      # <class 'list'>
dump({1:"python",2:"java"},f) # <class 'dict'>
 
f.close()
cs

 

 

위와같이 코드 입력 후 run해주면 아래와 같이 byte_fule.bin 파일이 생성되고 파일 이를 메모장으로 열면 알아볼 수 없는 형식으로 데이터가 입력되어있다.

 

 

 

따라서 우리는 데이터를 읽기 위해 load() 함수를 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# pickle 모듈을 읽어온다.
= open("byte_fule.bin",'rb')
 
= load(f)
print(d, type(d))   # 첫번째 저장한 dump
= load(f)
print(d, type(d))   # 두번째 저장한 dump
= load(f)
print(d, type(d))   # 세번째 저장한 dump
= load(f)
print(d, type(d))   # 네번째 저장한 dump
= load(f)
print(d, type(d))   # 다섯번째 저장한 dump
 
f.close()
cs

 

 

 

파일 f를 pickle 모듈의 load() 함수를 이용해 d에 저장하고 d값과 d의 타입을 출력한다. load()함수는 데이터를 한줄씩 읽어오기 때문에 (readline()와 같음.) 다섯번 반복하여 작성해주고 코드를 run해주면 다음과 같이 출력된다.

 

 

 

 

 

 

 

 


 

 

 

 

 

 3  with

 

 

파일을 자동으로 닫는 역할을 한다. 사용 방법은 다음과 같다.

 

with open("파일명 경로",'모드') as 객체:

 

 

 

다음 예제로 with를 사용하여 현재 소스코드를 작성하고 있는 디렉터리 외의 다른 디렉터리에 파일을 생성해보자.

 

# C드라이브 AAA폴더에 person.txt 만들기

1
2
with open('C:\\AAA\\person.txt','at'as out:
    pass
cs

 

open 모드를 'a'(append) 로 설정. 다음과 같이 C드라이브 AAA디렉터리에 생성된다. 

 

 

 

 

위 예제와 저장경로를 같게 설정하고 with을 이용해 텍스트 파일을 저장, 쓰기모드로 안에 내용을 이름, 나이로 구성하고 이를 입출력해보자.

1
2
3
4
5
6
with open('C:\\AAA\\soonipy.txt','wt'as out:
     name = input("이름>")
     age = int(input("나이>"))
 
     out.write("이름>%s\n"%name)
     out.write("나이>%d"%age)
cs

 

 

위와 같이 코드 작성 후 run해줘서 이름과 나이를 다음과 같이 입력해주었다. 그럼 해당 디렉터리에 입력해준 데이터가 저장된다.

 

 

 

 

반응형

댓글