파일입출력
컴퓨터 프로그램 실행에 있어서 많이 사용되는 대표적인 입 력과 출력 방식이 존재함
입력: 키보드, 마우스
출력: 화면, 스피커, 프린터 때로는 프로그램을 실행할 때 이미 저장된 것을 입력으로 사 용해야 할 경우가 있으며, 출력의 경우에도 화면이나 스피커 가 아닌 파일 형태로 저장해야 할 경우가 있음
프로그램에서 사용하는 변수는 일시적이며 프로그램 실행 을 중단하면 모두 사라짐
나중에 사용할 수 있게 정보를 저장하고 싶다면 하드디스 크 같이 좀 더 영구적인 어딘가에 저장해야 함파일이란
컴퓨터는 정보를 이진(binary)형태, 즉 0과 1만을 사용하 는 방식으로 저장함. 0과 1을 bit라 하고 8개의 bit로 구성 된 것을 byte라고 함.
파일은 이름이 있고 하드디스크, CD, DVD, USB 또는 다 른 종류의 저장 장치에 저장되어 있는 바이트의 모음
파일은 다양한 종류의 정보를 저장할 수 있음
텍스트, 사진, 음악, 컴퓨터 프로그램 등 파일은 아래와 같은 특성을 가짐
이름
파일에 들어 있는 데이터의 종류를 가리키는 유형:사진,음악
위치: 파일이 저장되어 있는 곳
크기: 파일에 들어 있는 바이트 수파일 명
보통의 파일명에는 최소한 하나의 점이 포함됨
점 다음에 오는 부분이 파일의 종류를 알려줌
확장자 (extension)라고 함
파일명은 사용자가 원하는 대로 지정할 수 있고 어 떤 확장자도 사용할 수 있음
텍스트 파일을 확장자 .mp3로 지정하여도 사운드 파일이 만들어 지지는 않음
파일의 이름을 지을 때에는 해당 파일의 종류와 부
합하는 파일 확장자를 사용하는 것이 바람직함
파일의 위치
지금까지는 프로그램과 같은 곳에 저장된 파일을 다루었 기 때문에 파일의 이름으로만 처리(18장 이미지 파일, 19 장 사운드 파일 등)
모든 파일은 어딘가에 저장되어야 하기 때문에 이름과 더 불어 모든 파일에는 위치가 있음.
하드디스크와 같은 저장장치는 폴더 또는 디렉토리로 구 성되어 있음
파일의 위치는 경로(path)로 표시함
파일열기
파일을 열기 전에 파일을 이용해 무슨 일을 할지 알아야 함
파일을 입력으로 사용할 거라면 파일을 읽기 용도로 염
새로운 파일을 생성하거나 기존 파일을 새로운 파일로 대체 하려면 파일을 쓰기 용도로 염
기존 파일에 추가하려면 파일을 추가 용도로 염
파일을 열면 파이썬에 파일 객체가 만들어짐
my_file = open(‘my_filename.txt, ‘r’)
파일 객체와 파일명의 차이
파일을 열고 파일객체를 생성하고 나면 파일명을 더 이상 사 용할 필요가 없음. 프로그램 내부에서는 모두 파일 객체를 사 용
파일 읽기
파이썬 내장 open( ) 함수를 이용해 파일을 열고 파일 객체 를 생성.
my_file = open(‘notes.txt’, ‘r’) #파일 객체 생성
lines = my_file.readlines( ) #전체파일을 읽어 리스트로 만듦
파일 읽기 예제
파일을 모두 처리하고 나면 파일을 닫아야 함
my_file.close( )
notes.txt
한 번에 한 줄씩 읽기
readlines( )메서드는 파일의 끝 바로 전까지 파일의 모든 줄 을 읽음. 파일을 한 번에 한 줄씩 읽고 싶다면 readline( ) 메 서드를 사용
first_line = my_file.readline( ) #한 줄만 읽음
readline( )을 여러 번 이용해서 파일 읽기
readline( )은 한 번에 한 줄만 읽기 때문에 결과를 리스트에 넣지 않음. readline( )을 사용할 때마다 문자열 하나가 반환 됨
처음으로 되돌아 가기
readline( ) 을 몇 번 사용한 후 파일이 시작하는 부 분으로 되돌아가고 싶다면 seek( ) 메서드를 사용하 면 됨
seek( ) 메서드는 파이썬으로 하여금 파일 내에서
사용자가 지정한 곳으로 가도록 함. 괄호 안에 지정
한 숫자는 파일이 시작하는 지점을 기준으로 한 바
이트 수.
텍스트 파일과 바이너리 파일
파일에는 두 가지 종류가 있음
텍스트 파일: 글자, 숫자, 기호, 특수문자와 같은 텍스트
바이너리 파일: 텍스트가 담겨 있지 않음. 음악, 사진 등 의 데이터가 담겨 있으며 텍스트 파일과 달리 줄(line)이 라는 것이 없음 바이너리 파일에 대해서는 readline( )이나 readlines( ) 메서드를 사용할 수 없음. 다른 방법은 파일을 불러오 는 모듈을 이용해야 함
pygame.mixer.load(‘bg_music.mp3’)
my_music_file = open(‘bg_music.mp3’, ‘rb’)파일에 쓰기
프로그램에서 처리한 정보를 영구적으로 저장하는 방법은 하드디스크에 저장하는 것임. 프로그램을 종료하거나 컴퓨 터를 끈 상태에서도 데이터가 하드 디스크에 보관됨
파일에 데이터를 넣는 방법
쓰기: 새 파일을 만들거나 기존 파일을 덮어쓰는 것
추가: 기존 파일에 추가하는 것으로 기존 파일을 유지 파일에 쓰거나 추가하려면 먼저 파일을 열어야 함
my_file = open(‘new_notes.txt’, ‘r’) # 읽기 용도
my_file = open(‘new_notes.txt’, ‘w’) # 쓰기 용도
my_file = open(‘new_notes.txt’, ‘a’) #추가 용도
읽기+쓰기, 읽기+추가 의 조합이 가능
파일에 추가하기
파일 추가 모드 사용하기
파일에 문자열을 쓰려면 write( )메서드를 사용
파일을 읽고 작업을 마칠 때와 마찬가지로 쓰기를 마쳤을 때도 close( )를 사용해서 파일을 닫아야 함
close( )로 파일을 닫지 않으면 변경사항이 저장되지
않음
파일에 쓰기
쓰기 모드를 이용한 쓰기 예제: write( ) 이용
기존 파일에 쓰기 모드 사용하기 예제
print를 이용해 파일에 쓰기
print를 이용해 파일에 쓰는 것도 가능
파일을 쓰기 모드나 추가 모드로 연 다음 print를 이용해 서 파일에 쓸 수 있음
>> 기호는 print 출력 결과를 화면이 아닌 파일로 보내 라는 것을 의미. 이를 출력 재지정(redirection)이라고 함
write( )대신에 print를 사용하면 print가 자동으로 숫자 를 문자열로 변환하는 등의 작업을 대신해 주기 때문에 더 편리한 경우도 있음
파일에 저장하기: pickle
텍스트나 바이너리가 아닌 리스트나 객체 같은 것을 저장 하려면 어떻게 해야 할까?
리스트 안에는 다양한 종류의 항목이 존재
객체는 다양한 속성을 가지고 있음 객체의 속성을 문자열로 변환한 다음에 텍스트 파일로 쓸 수도 있지만…
파일에서 객체로, 또 이와 반대의 작업을 할 경우에는 문제가 복잡해 짐 파이썬에는 리스트나 객체 같은 것들을 더 쉽게 저장할 수 있는 방법을 제공함
pickle 모듈
피클링
다양한 데이터로 구성된 리스트를 고려해보면…
>>>my_list = [ ‘Fred’, 73, ‘Hello there’, 81.987e-13]
pickle 모듈 import 후 “피클”을 만들기 위해 dump( )함수 를 사용
>>>import pickle
>>>pickle_file = open(‘my_pickled_list.pkl’, ‘w’)
>>>pickle.dump(my_list, pickle_file)