2012-01-28 2 views
2

파이썬에서 다양한 수의 파일을 여는 "최선의"방법은 무엇입니까?가변 개수의 리소스에 대한 Python "RAII"관용어는 무엇입니까?

파일 수가 미리 알려지지 않은 경우 "사용"하는 방법을 추측 할 수 없습니다.

(수신 RAII/C++에서)

+1

관련 항목 http://stackoverflow.com/questions/5071121/raii-in-python-automatic-destruction-when-leaving-a-scope –

+1

"파일 수가 알려지지 않은 것을 짐작할 수 없습니다. 손 "은 아마도 의미 할 수 있습니다. 알려지지 않은 수의 파일을 열고 열어 두는이 알고리즘에 대한 설명을 제공 할 수 있습니까? –

+1

예 : 명령 줄에서 다양한 수의 파일 이름을 사용하고 모든 파일을 stdout에 줄 간격으로 인터리브하는 스크립트입니다. – user1174648

답변

4

글쎄, 당신이 그 핸들을 모두 (filename, mode)쌍 목록을 가져다가 열린 파일 핸들의 목록을 반환 (다음 폐쇄 자신의 상황에 맞는 관리자를 정의 할 수 있습니다 때 contextmanager 종료).

자신의 컨텍스트 관리자를 정의하는 방법에 대한 자세한 내용은 http://docs.python.org/reference/datamodel.html#context-managershttp://docs.python.org/library/contextlib.html을 참조하십시오.

+0

이것은 청구서에 딱 들어 맞습니다. – user1174648

+0

명확한 설명과 컨텍스트 관리자 문서를 다시 읽은 후에 이것은 나에게 매우 명백하게 보입니다. 덕분에 초보자들에게 친절하게 대해 줘서 고마워! – user1174648

+0

이 답변이 필요에 부합되는 경우 옆에있는 체크 표시의 개요를 클릭하여 동의 표시로 표시하십시오. 감사! – Amber

0

3.3과 같은 상황에서는 contextlib.ExitStack을 사용할 수 있습니다. 다음은 contextlib 설명서의 일부 예제 코드입니다.

with ExitStack() as stack: 
    files = [stack.enter_context(open(fname)) for fname in filenames] 
    # All opened files will automatically be closed at the end of 
    # the with statement, even if attempts to open files later 
    # in the list raise an exception 

2.7 사용자가 운이 좋지 않습니다. 업그레이드 할 또 다른 이유.

관련 문제