본문으로 바로가기

[Python] 파일 데이터 저장하기

category Data Science/Python 2015.02.27 14:13

파이썬은 파일에 저장하는 일반적인 도구뿐만 아니라 파이썬 데이터를 효과적으로 저장하는 멋진 장치도 갖고 있습니다.

 

파일에 기록하기

파일에 대한 접근 모드를 저정할 수 있습니다. r(읽기) 모드가 기본값이고 쓰기 위해 열 때에는 w(쓰기) 모드를 사용하세요.

out = open('data.txt', 'w')

 

데이터를 파일로 출력하기 위해서는 file 인자에 데이터 파일 객체를 지정하세요.

print('파일에 기록할 내용입니다.', file=out)

 

작업을 다 끝낸 후에는 반드시 파일을 닫으세요.

out.close()

 

w 접근 모드로 파일을 열때 만약 기존에 파일이 있었다면, 파일에 들어 있던 이전 내용이 모두 지워집니다. 파일의 끝에 추가하기 위해서는 a 접근모드를 사용하며, 파일의 내용을  읽고 쓰기 위해 열려면 w+ 모드를 사용하세요.

 

sketch.txt

Man: Is this the right room for an argument?
Other Man: I've told you once.

Other Man: Now let's get one thing quite clear: I most definitely told you!
Man: Oh no you didn't!
Other Man: Oh yes I did!
Man: Oh no you didn't!
Other Man: Oh yes I did!
Man: Oh look, this isn't an argument!
(pause)
Other Man: Yes it is!

 

man = []
other = []
 
try:
    data = open('sketch.txt')
    
    for each_line in data:
        try:
            (role, line_spoken) = each_line.split(':'1)
            line_spoken = line_spoken.strip()
            if role == 'Man':
                man.append(line_spoken)
            elif role == 'Other Man':
                other.append(line_spoken)
        except ValueError:
            pass
    data.close()
except IOError:
    print("잘못된 파일 입니다.")
 
print(man)
print('-----------------------------------------------------')
print(other)
    
try:
    man_file = open('man_data.txt','w')
    other_file = open('other_data.txt','w')
 
    print(man, file=man_file)
    print(other, file=other_file)
 
    #man_file.close()
    #other_file.close()
 
except IOError as err:
    print('File Error' + str(err))
finally:
    man_file.close()
    other_file.close()
 
cs

- 우선 sketch.txt 파일을 읽기모드로 열고 'Man'과 'Other Man'의 내용을 man, other 배열에 저장을 합니다.

- man_data.txt, other_data.txt 파일을 쓰기 모드로 열고(파일이 없을경우 새로 만들어짐) 각각의 객체를 지정하여 man, other에 저장되어 있는 데이터를 쓰도록 합니다.

- try/except 구분으로 예외처리를 해주고 finally구문에는 파일닫는 구문을 추가해 줍니다.

 

만약, 파일을 open하는 도중 문제가 발생하였다면 finally 구문에서 파일객체를 닫는작업 또문 문제가 발생합니다.

 
try:
    data = open('file.txt')
    print(data, end='')
except IOError as err:
    print('File Error : ' + str(err))
finally:
    data.close()
 
cs

 

▶ File Error : [Errno 2] No such file or directory: 'file.txt'

 

finally:

   if 'data' in locals():

      data.close()

객체를 닫기전 해당 객체를 확인한 후 닫는 방법입니다. locals() 내장 함수는 현재 범위에서 사용할 수 있는 이름들을 반환합니다.

 

with open('file.txt') as data

또한 with를 사용하면 객체를 닫는작업은 필요가 없습니다.

 

except IOError as err:

그리고 예외가 발생해서 except 스위트에 의해 처리될 때 파이썬 인터프리터는 예외 객체를 스위트에 전달합니다. 이 예외 객체를 코드의 식별자가 가리키도록 할수 있습니다.

 

데이터를 피클링하기

 

                                                        

 

파이썬은 피클(pickle)이라고 하는 표준 라이브러리를 제공합니다. 리스트뿐만 아니라 모든 파이썬 데이터 객체를 저장하고 읽을 수 있습니다.

데이터를 파일에 피클링하면, 데이터는 영구적으로 존재하게 되고, 나중에 다른 프로그램이 읽을 수도 있습니다.

 

피클링 사용법은 dump로 저장하고 load로 읽습니다.

 
import pickle
 
with open('mydata.pickle','wb') as mysavedata:
    pickle.dump(['rad','blue','green'], mysavedata)
 
with open('mydata.pickle','rb') as myloaddata:
    a_list = pickle.load(myloaddata)
 
print(a_list)
 
cs

 

open 모드 'wb', 'rb'에서 b는 파이썬이 데이터를 이진모드로 열도록 합니다.

새로 생성된 mydata.pickle을 열어보면 €']q (X   radqX   blueqX   greenqe.'로 되어있네요.

 

만약 문제가 생긴다면 pickle 모듈은 PickleError 형의 예외를 발생시킵니다.

'Data Science > Python' 카테고리의 다른 글

[Python] 클래스  (0) 2015.03.11
[Python] 데이터처리  (0) 2015.03.10
[Python] 파일 데이터 저장하기  (0) 2015.02.27
[Python] 파일과 예외  (0) 2015.02.23
[Python] 모듈  (0) 2015.02.16
[Python] 함수  (0) 2015.02.16

댓글을 달아 주세요