클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

파이썬의 입출력 6 - 파일 읽고 쓰기 본문

프로그래밍 언어/파이썬

파이썬의 입출력 6 - 파일 읽고 쓰기

huenuri 2024. 9. 6. 15:12

이전까지는 값을 입력 받을 때는 사용자가 지ㅣㄱ접 입력하는 방식을 사용했고, 출력할 때는 모니터 화면에 결과값을 출력하는 방식을 사용했다. 하지만 입출력 방법이 꼭 이것만 있는 것은 아니다. 이번에는 파일을 통한 입출력 방법에 대해서 알아보기로 하자.

여기서는 패일을 새로 만든 다음 프로그램이 만든 결과값을 새 파일에 적어본다.


 

 

 

파일 생성하기

이렇게 새 파일이 하나 생성된 것을 볼 수 있다. 파일을 생성하기 위해 파이썬 내장 함수 open을 사용했다. open 함수는 파일 이름과 파일 열기 모드를 입력값으로 받고 결과값으로 파일 객체를 리턴한다.

 

모드설명파일이 존재하지 않을 때파일이 존재할 때

모드 설명 파일이 존재하지 않을 때 파일이 존재할 때
'r' 읽기 모드 (기본값). 파일을 읽기만 할 수 있음 오류 발생 (FileNotFoundError) 파일의 내용을 읽음
'w' 쓰기 모드. 파일이 존재하면 내용을 지우고 새로 작성 새 파일을 생성 파일 내용을 덮어씀
'a' 추가 모드. 파일 끝에 내용을 추가 새 파일을 생성 기존 내용 뒤에 추가
'x' 배타적 생성 모드. 새 파일을 작성 새 파일을 생성 오류 발생 (FileExistsError)
'b' 이진 모드. 파일을 이진(binary) 데이터로 처리 - -
't' 텍스트 모드. (기본값) 텍스트 파일을 처리 - -
'+' 읽기 및 쓰기 모드. 파일을 읽고 쓸 수 있음 파일이 없으면 오류 발생 파일을 읽고 쓸 수 있음

 


 

 

 

 

새 파일을 특정 폴더 안에 넣으려면 이렇게 디렉토리를 지정해주면 되는데 오류가 뜨고 있다. 이건  Python에서는 백슬래시(\)를 이스케이프 문자로 사용하기 때문이다. 경로 문자열 안에서 \U, \t 등이 다른 특별한 문자로 해석된다.

해결 방법으로는 경로에서 백슬래시를 두 개 작성하는 방법과 문자열 앞에 r을 붙여주면 이 문자열은 raw string으로 처리되어 이스케이프 문자가 아닌 문자 그대로 인식된다. 난 그 중 두번째 방법을 사용해보기로 했다.

 

 

 

 

폴더 안에 새 파일이 생성된 것을 볼 수 있다. f.close()는 열려 있는 파일 객체를 닫아주는 역할을 한다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일의 객체를 자동으로 닫아주기 때문에 생략해도 되지만, close()를 사용해서 열려 있는 파일을 직접 닫아주는 것이 좋다.

쓰기 모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.

 


 

 

 

 

실행을 해야 파일이 생긴다.


 

 

 

파일을 쓰기 모드로 열어 내용 쓰기

이번에는 문자열 데이터를 파일에 직접 써보자.

 

 

 

 

 

이 코드는 그냥 주피터 노트북에 실행이 된다는 차이점이 있다. 근데 주피터에서 하니 입력을 하지 않아도 메모장에 그냥 이런 텍스트 문서가 출력이 되었다.

 


 

 

 

이제 명령 프롬프트 창에서 예제를 실습해보았다.

 

 

하지만 파일이 생성되지는 않았다. 파일을 영문 이름으로 변경해도 마찬가지였다. 지금은 잘 안되니 우선 넘어가기로 했다.

 


 

 

 

 

파일을 읽는 여러 가지 방법

 


 

 

 


키보드를 통해 입력을 받는 예시이다.


 

 

 

2. readlines 함수 사용하기

 

readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 가지는 리스트를 리턴한다.

 


 

 

 

 

 

 


 

 

 

f.read()는 파일의 내용 전체를 문자열로 리턴한다.

 


 

 

 

 

 

 


 

 

 

파일에 새로운 내용 추가하기

 

새 파일을 열어보면 이렇게 11번째에서 19번째 줄이 추가된 것을 볼 수 있다. a는 추가 모드이다.

 


 

 

 

 

with 문과 함께 사용하기

close() 문 없이 자동으로 파일을 열고 닫는 기능이 with 문이다.

 

 

 

with 문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f가 자동으로 닫힌다.

 


 

 

 

학습을 마치고

주피터 노트북으로 하니 실습이 제대로 안 되는 부분도 있었지만 나중에 이런 부분이 필요하다면 비주얼 코드로 다시 학습해볼 생각이다. 지금은 빠르게 학습하는 것을 목표로 하니 이 정도도 충분한 것 같다.

이 내용도 수업 시간에 다루지 않은 생소한 내용이었다.