본문 바로가기

언어/Python

[ Python ] with로 파일 자원 관리 하면서 파일 읽기

반응형

with 키워드는 Python에서 특정 작업을 할 때, 코드 블록의 시작과 끝을 명시적으로 나타내어 자원을 관리하고 에러 처리하는 데 유용하게 사용됩니다. 주로 파일 작업이나 데이터베이스 연결 같은 자원의 할당과 해제를 자동으로 처리할 때 사용됩니다.

기본 구조

with 키워드의 기본 구조는 다음과 같습니다:

with 표현식 as 변수:
    코드 블록
  • 표현식: 자원을 할당하는 표현식, 예를 들어 파일을 여는 함수.
  • 변수: 표현식의 결과를 담을 변수.
  • 코드 블록: 자원을 사용하여 수행할 작업을 작성하는 부분.

예제: 파일 처리

파일을 열고 작업한 후, 파일을 자동으로 닫아주는 간단한 예제입니다.

# 파일에 내용 쓰기
with open('example.txt', 'w') as file:
    file.write('Hello, World!')

위 코드에서 with open('example.txt', 'w') as file:는 파일을 쓰기 모드('w')로 열고, file 변수에 파일 객체를 할당합니다. with 블록이 종료되면 파일이 자동으로 닫힙니다. 이를 통해 별도로 file.close()를 호출할 필요가 없습니다.

예제: 예외 처리

with 키워드는 예외 발생 시에도 자원을 안전하게 해제할 수 있습니다.

try:
    with open('example.txt', 'r') as file:
        content = file.read()
        print(content)
except FileNotFoundError:
    print('파일을 찾을 수 없습니다.')

이 코드에서 파일이 존재하지 않으면 FileNotFoundError 예외가 발생하며, 이를 except 블록에서 처리합니다. 파일이 열리지 않은 경우에도 with 블록이 끝나면서 자동으로 파일이 닫히므로 자원 누수가 발생하지 않습니다.

with 키워드의 장점

  • 자원 관리: with 키워드는 자원의 할당과 해제를 자동으로 처리하여 메모리 누수나 파일 핸들 누수를 방지합니다.
  • 가독성: 코드의 구조가 명확해지고, 자원의 관리 부분이 더 직관적으로 보입니다.
  • 안전성: 예외가 발생해도 자원이 적절히 해제되므로 코드의 안전성이 높아집니다.

with 키워드를 지원하는 객체

with 키워드를 사용하려면 해당 객체가 __enter__()__exit__() 메서드를 정의해야 합니다. 이러한 객체를 "컨텍스트 매니저"라고 부릅니다. Python의 기본 라이브러리에는 파일 객체 외에도 여러 가지 컨텍스트 매니저가 포함되어 있습니다.

from threading import Lock

lock = Lock()

with lock:
    # 이 블록 내에서만 lock이 걸리며,
    # 블록이 종료되면 lock이 자동으로 해제됩니다.
    # 스레드 안전한 코드 작성에 유용합니다.
    pass

이처럼 with 키워드는 다양한 상황에서 안전하고 간결한 코드를 작성하는 데 유용하게 사용됩니다.

반응형