반응형
질문
한 번에 여러 파일을 변경하려고 합니다. 그러나 모든 파일에 쓸 수 있는 경우에만 iff를 작성할 수 있습니다. 여러 개의 열린 호출을 with
문과 결합할 수 있는 방법이 있는지 궁금합니다:
try:
with open('a', 'w') as a and open('b', 'w') as b:
do_something()
except IOError as e:
print 'Operation failed: %s' % e.strerror
그렇지 않은 경우, 이 문제에 대한 우아한 해결책은 무엇일까요?
답변
Python 2.7 (또는 3.1)부터는 다음과 같이 작성할 수 있습니다.
with open('a', 'w') as a, open('b', 'w') as b:
do_something()
(역사적 참고: 이전 버전의 Python에서는 때로 컨텍스트 매니저를 중첩시키기 위해
contextlib.nested()
를 사용할 수 있습니다. 그러나 이는 여러 파일을 열 때 예상대로 작동하지 않습니다. 자세한 내용은 링크된 문서를 참조하세요.)
변수 개수의 파일을 동시에 열고 싶은 경우는 드물지만, Python 3.3부터는 contextlib.ExitStack
을 사용할 수 있습니다.
with ExitStack() as stack:
files = [stack.enter_context(open(fname)) for fname in filenames]
# "files"를 사용하여 작업 수행
보통은 파일을 순차적으로 처리하고, 특히 파일의 개수가 변수인 경우에는 모두 동시에 열지 않습니다.
for fname in filenames:
with open(fname) as f:
# "f"를 처리함
반응형
댓글