본문 바로가기
언어/Python

[Python 기본 공부정리] 7-2. 파일 입출력 함수

by 민-Zero 2019. 12. 28.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 

틀린 부분에 대한 지적은 감사합니다.

표준 입출력 함수에 이어 다른 입출력 함수인 파일 입출력 함수에 대해 정리하자.

 

1. 파일 입출력 함수

파일을 불러오거나 새로 생성하기 위해 open()이라는 내장 함수를 사용하며 입력에 대한 기능이 끝나면 close()라는 함수를 통해 닫는다.

문법)

파일 객체명 = open('파일 경로 및 이름', 모드)

파일 입출력 코드

.....

파일 객체명.close()

. close() 함수는 입력하지 않아도 프로그램 종료 시에 파이썬에서 자동으로 객체를 닫아주기 때문에 따로 입력하지 않아도 상관은 없다. 다만 쓰기 모드로 열었던 함수를 닫지 않고 다시 열려고 하면 에러가 발생한다

파일 모드 설명
r 읽기 모드(디폴트 설정)
w 쓰기 모드, 파일이 이미 존재한다면 모든내용 삭제후 쓰기 
a 추가 모드, 파일이 이미 존재한다면 마지막에 내용 추가
x 쓰기 모드, , 파일이 이미 존재한다면 에러 발생
+ 읽기쓰기 모드
t 텍스트 모드(디폴트)
b 바이너리 모드, 바이트단위 데이터 기록

t는 텍스트 형태로 파일 입출력을 하는 디폴트 모드이므로 주로 생략하고 작성한다.

-헷갈리는 파일 모드 예시

'wb' : 바이너리 데이터 쓰기

'r+t' : 읽기 쓰기로 맨 앞에서부터 덮어쓴다

+가 붙을 경우 파일 처리방식이 차이가 난다.

 

open과 close함수의 간단한 예시를 보면

 

따로 경로를 입력하지 않고 파일명만 적고 w모드로 작동하였다 r모드로 작동시킬 경우 해당 파일이 존재하지 않는다면 에러를 발생시킨다. 해당 프로젝트가 동작하고 있는 디렉토리에 존재하지 않는 파일을 w모드로 작동하였으므로 새로운 파일이 생성된 모습을 확인할 수 있다. 만약 C드라이브의 study라는 디렉토리에 있는 파일이라면 'C:/study/test.txt'로 적어주어야 한다.

 

2. 파일에 데이터 작성

open()으로 파일을 열었다면 해당 파일에 데이터를 입력하거나 가져와야 할 것이다. 그중 데이터를 파일에 입력하는 내장 함수로는 write(), writelines() 함수가 존재한다. 해당 함수의 인수로 파일에 입력하고자 하는 데이터를 넘겨주면 된다. 두 함수를 간략히 정리하면

write() : 한 번에 하나의 데이터를 파일에 입력한다.

writelines() : 리스트 등으로 이루어진 여러 문장을 한 번에 입력하기 위한 함수로써 모든 요소를 한 번에 입력해 준다.

 

문법) 파일 객체. write(입력 데이터)

 

write() 함수를 간단히 사용해보자

만약 f.write() 대신 print() 함수를 사용했다면 평소에 보던 출력 화면에 출력되던 문장이 설정한 경로에 있는 파일에 작성되는 것을 확인할 수 있다. 특별한 것이 아니라 커맨드 창에 출력하던 것을 파일에 출력한다고 생각하면 편하다.

writelines() 함수를 사용해 보자

리스트의 요소가 한 번에 입력되기 때문에 join()을 이용하여 개행 문자를 첨가하여 리스트를 통한 여러 데이터를 한 번에 입력하였다.

 

3. 파일을 읽어오기

파일에 데이터를 작성하는 것과 반대로 파일에 있는 데이터를 파이썬으로 가져오는 함수로는 readline(), readlines(), read() 총 3개의 내장 함수가 있다. 각 함수의 특징을 간략히 정리하면

readline() : 처음 데이터부터 마지막 데이터까지 차례로 하나씩 가져오는 함수

readlines() : 모든 데이터를 리스트 형태로 각각 요소에 저장하여 가져오는 함수

read() : 파일에 존재하는 모든 데이터를 가져온다.

해당 함수를 실행하려면 r(읽기) 모드로 변경해야 함을 잊지 말자.

 

먼저 readline()을 확인해 보자

텍스트 파일에 한 줄씩 저장된 문장을 readline()은 한 줄씩 읽어 들이게 되므로 반복문을 사용하여 처음부터 마지막까지 전부 읽어올 수 있도록 하며 데이터를 대입한 data변수에 아무런 값이 존재하지 않을 때 반복문을 빠져나오도록 한다.

encoding='UTF8'은 cp949 코덱으로 인코딩 된 파일을 읽어 들일 때 생긴 문제로 인해 추가한 것이므로 무시해도 좋다. 

 

readlines()를 확인해 보자.

readline에서 사용한 텍스트 파일을 그대로 이용하였다. readlines()를 통해 읽어오면 그냥 문장뿐만 아니라 끝에 개행 문자까지도 같이 입력되는 것을 확인할 수 있다.

 

read() 함수는 해당 파일의 모든 내용을 문자열 타입으로 한 번에 가져오는 것을 확인할 수 있다.

 

4. 파일에 내용 추가하기

a(추가) 모드로 변경하여 사용해야 하며 동작 방법은 w와 같다. 단 w는 기존에 동일한 파일이 존재할 경우 파일내용을 모두 삭제하고 새로 입력하였지만 a모드로 사용할 경우 내용이 지워지지 않고 맨 마지막 부분에 입력하는 데이터가 추가되는 차이점이 존재한다.

사용 방법은 w와 완전히 같고 내용이 지워지지 않는다는 차이점만 존재한다.

 

5. 입출력 함수의 자동화 with문

파이썬에서는 파일 처리를 주로 with문으로 수행한다. 파일을 open으로 열 경우 그대로 프로그램을 종료한다면 close를 따로 하지 않아도 상관없지만 만약 open한뒤 어떤 기능을 수행한 후 모드를 변경하고 다시 open을 해야 한다면 꼭 close를 해주어야 할 것이다. 이때 with문을 사용한다면 파일의 open과 close를 자동으로 처리해 준다.

문법)

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

    파일 입출력 기능 수행

 

with문이 끝나는 순간 자동으로 close가 되어 따로 close를 입력하지 않아도 된다.

 

댓글