[Python] Python에서의 with문 사용하기

업데이트(2019.02.19): 파일열기모드 관련 내용 추가

python에서 with문의 용도와 쓰임을 알아보자


소개

기본적으로 거의 모든 프로그래밍 언어가 파일 입출력을 지원하며(어찌보면 당연한 이야기인가?…) 그러한 파일 입출력을 할 때 해당 파일을 위해 open과 close를 해줘야한다.

그러한 부분이 python에도 존재하며 혹시나 우리가 했을 법한 실수인 close를 해주는 부분을 빼먹을 수도 있기에 하나의 with문으로 묶어서 사용 할 수 있다.


기본적인 사용법

  • 기본적인 사용법은 with expression as target: suite의 형태로 사용하면 된다.


다음 아래와 같은 코드를

file_data = open('file.txt')
print(file_data.readline(), end="")
file_data.close()

아래처럼 바꿀 수 있다.

with open('file.txt') as file_data:
    # 기본적으로 사용하는 함수를  with문 안에 사용하면 되며
    # with문을 나올 때 close를 자동으로 불러줍니다.
    print(file_data.readline(), end="")


파일 열기 모드

  • 파일열기모드: 파일열기모드란 파일을 Binary형태로 읽을지 아니면 인코딩단위로 읽을지, 파일을 읽을건지 쓸건지 아니면 동시에 할건지에 대한 부분을 정하는 지시자라고 볼 수 있습니다.

  • r: 읽기 모드, 파일을 읽을 때 사용합니다.
  • w: 쓰기 모드, 파일에 쓸 때 사용하며 파일이 이미 동일한 이름으로 존재한다면 덮어씁니다.
  • a: 추가 모드, 존재하는 파일에 추가할 때 사용하며 파일이 없다면 생성합니다.
  • r+, w+, a+: 읽기모드 + 쓰기모드, w+a+의 차이는 위와 같습니다.
  • rb, wb, ab, rb+, wb+, ab+: 각각의 모드들은 위와 동일하나 Binary 포맷으로 읽거나 쓰는걸 진행합니다.

쓰기(Write)

with open('file.txt', 'w') as file_data:
    file_data.write("First\n")
    file_data.write("Second")

읽기(Read)

with open('file.txt', 'r') as file_data:
    for line in file_data:
        print(line)

추가(Append)

with open('file.txt', 'a') as file_data:
    file_data.write("Third\n")


참고자료