복붙노트

[PYTHON] 파이썬에서 전체 파일 읽기

PYTHON

파이썬에서 전체 파일 읽기

Content = open ( 'Path / to / file', 'r')으로 전체 파일을 읽으면 read ()는 스크립트가 종료 될 때까지 열린 채로 남아있는 파일 핸들입니까? 전체 파일을 읽는 더 간결한 방법이 있습니까?

해결법

  1. ==============================

    1.그 질문에 대한 대답은 특정 파이썬 구현에 다소 의존합니다.

    그 질문에 대한 대답은 특정 파이썬 구현에 다소 의존합니다.

    이것이 무엇인지 이해하려면 실제 파일 객체에 특히주의하십시오. 코드에서 해당 객체는 표현식에서 한 번만 언급되며 read () 호출이 반환 된 후 즉각적으로 액세스 할 수 없게됩니다.

    이는 파일 객체가 가비지임을 의미합니다. 유일한 나머지 질문은 "언제 가비지 수집자가 파일 객체를 수집합니까?"입니다.

    참조 카운터를 사용하는 CPython에서는 이런 종류의 쓰레기가 즉시 발견되어 즉시 수집됩니다. 이것은 일반적으로 다른 파이썬 구현에는 해당되지 않습니다.

    파일이 닫혀 있는지 확인하는 더 좋은 해결책은 다음과 같습니다.

    with open('Path/to/file', 'r') as content_file:
        content = content_file.read()
    

    블록이 끝난 직후 파일을 항상 닫습니다. 예외가 발생하더라도

    편집 : 그것에 더 미세한 점을 넣으려면 :

    context manager 설정과 함께 "자동으로"호출되는 file .__ exit __ () 이외에, file.close ()가 자동으로 호출되는 다른 방법 (즉, 명시 적으로 직접 호출하는 것 외에)은 파일을 통한 것입니다. __del __ (). 이것은 __del __ ()이 언제 호출되는지에 대한 질문을하게합니다.

    -- http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx

    특히:

    -- https://docs.python.org/3.5/reference/datamodel.html#objects-values-and-types

    (강조 광산)

    하지만 제안에 따르면 다른 구현은 다른 동작을 할 수 있습니다. 예를 들어, PyPy는 6 가지 가비지 콜렉션 구현을 가지고있다.

  2. ==============================

    2.pathlib를 사용할 수 있습니다.

    pathlib를 사용할 수 있습니다.

    파이썬 3.5 이상 :

    from pathlib import Path
    contents = Path(file_path).read_text()
    

    더 낮은 버전의 Python의 경우 pathlib2를 사용하십시오.

    $ pip install pathlib2
    

    그때:

    from pathlib2 import Path
    contents = Path(file_path).read_text()
    

    이것이 실제 read_text 구현입니다.

    def read_text(self, encoding=None, errors=None):
        """
        Open the file in text mode, read it, and close the file.
        """
        with self.open(mode='r', encoding=encoding, errors=errors) as f:
            return f.read()
    
  3. from https://stackoverflow.com/questions/7409780/reading-entire-file-in-python by cc-by-sa and MIT license