2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with를 진행토록 하겠습니다.

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 실행하시면 됩니다.

예를 들어, 8_with.py를 생성하고 코드를 실행합니다.

 

 

 

TL;DR

Python의 with 구문은 코드를 단순화하고 자동으로 클린업 작업을 수행합니다. with 구문을 사용하면 코드가 더 간결해지고 외부 리소스를 관리하기 쉬워지며. 파일 스트림과 같은 외부 리소스를 관리하는 데 유용합니다.
 

 

Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with

with 구문을 사용하면 try/finally 에서 코드를 단순화시킬 수 있고 항상, 클린업 작업을 자동 실행합니다.

 

설명만으로는 감이 잘 안 오실 겁니다. 하지만 코드를 살펴보면 금방 이해하실 거예요. 

이미 몇 번, 이전 강좌의 포스트에서 with 구문을 쓰는 것을 보여드렸습니다. 파일 입출력과 관련된 부분이었는데요. 

 

Python에서 with를 사용하는 이유

SQLER의 이전 포스트에서 보신 것처럼, 파일 스트림 작업을 할 때, 보통 이런 패턴으로 작업합니다.

파일을 쓰기 위해 열고, 쓰기 작업 후, 스트림을 close 해서 완료하는 절차입니다.

stream = open('output.txt', 'wt')
stream.write('Lorem ipsum dolar')
stream.close() # 꼭 close를 해야 합니다.

만약 정상적으로 close 되지 않으면, 다음에 파일을 열 때, 파일이 이미 열려 있다는 메시지가 뜨고 적절한 처리를 해야 합니다.

 

try / finally 작업

이런 경우를 대비해 try / finally 패턴 작업이 필요합니다.

try:
    stream = open('output.txt', 'wt')
    stream.write('Lorem ipsum dolar')
finally:
    stream.close() # 정상/오류 상황 양쪽 모두, finally block을 통해 close 해야 합니다.

 

이런 경우에, with 구문이 유용합니다. 위의 코드를 이런 식으로, with 구문으로 변경할 수 있습니다.

 

with로 변경한 과정

with open('output.txt', 'wt') as stream:
    stream.write('Lorem ipsum dolar')

 

이렇게 file stream 작업이나 다른 네트워크 stream 작업 등의 외부 리소스 관련 작업을 할 때, with를 이용하면 코드를 더 간결하게 유지하면서 같은 작업을 할 수 있습니다.

 

도움 되시길 바랍니다.

 

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/more-python-for-beginners/08 - Managing external resources at master · CloudBreadPaPa/c9-python-getting-started (github.com)

 

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 23538
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12426
118 오픈소스 소통을 위한 Git 공부하기 | ep6. 내 저장소에 소스를 푸시하기 위한 Fork | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.02 48
117 오픈소스 소통을 위한 Git 공부하기 | ep5. 브랜치 (Branch) 이해하기 | 애저 듣고보는 잡학지식 코난(김대우) 2022.11.01 32
116 오픈소스 소통을 위한 Git 공부하기 | ep4. 변경 단위를 만들기 위한 Commit | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.31 31
115 오픈소스 소통을 위한 Git 공부하기 | ep3. 소스를 가져오기 위한 Clone | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.30 30
114 오픈소스 소통을 위한 Git 공부하기 | ep2. Git를 소개합니다 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.28 38
113 오픈소스 소통을 위한 Git 공부하기 | ep1. 버전 관리의 중요성 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.27 45
112 오픈소스 소통을 위한 Git 공부하기 | ep0. 인트로 | 애저 듣고보는 잡학지식 코난(김대우) 2022.10.24 86
111 Azure VM - 오픈소스 ROS Gazebo Web 설치 및 실행 file 코난(김대우) 2022.10.19 140
110 parquet 파일의 meta 정보 추출 코난(김대우) 2021.11.16 1107
109 embedded SQL - GlueSQL, rust 기반 오픈소스 프로젝트 file 코난(김대우) 2021.10.22 434
108 대규모 머신러닝 프로젝트 Serving에 사용되는 Python WAS, ASGI - uvicorn file 코난(김대우) 2021.10.06 949
107 Apache Arrow 리뷰 file 코난(김대우) 2021.10.05 2020
106 autopep8을 이용한 python 린트(linting) 구현 코난(김대우) 2021.09.15 654
105 Python에서 환경변수(environment variable) 처리 코난(김대우) 2021.09.15 226
104 Python에서 random 문자열이나 숫자 가져오는 방법 코난(김대우) 2021.09.15 942
103 Python 중급 강좌 - 9. 비동기 작업(Asynchronous operations): asyncio 코난(김대우) 2021.01.03 714
» Python 중급 강좌 - 8. 외부 리소스 관리(Managing external resources): with 코난(김대우) 2021.01.03 375
101 Python 중급 강좌 - 7. 파일작업(File read/write) file 코난(김대우) 2021.01.03 1378
100 Python 중급 강좌 - 6. 파일시스템(File system) 관리 코난(김대우) 2021.01.03 628
99 Python 중급 강좌 - 5. 다중상속(Mixins - multiple inheritance) 코난(김대우) 2021.01.03 457





XE Login