[python] 내장 된 개방 기능에서 모드 a, a +, w, w + 및 r +의 차이점은 무엇입니까?

내장 파이썬에서 열린 기능, 모드 사이의 정확한 차이는 무엇인가 w, a, w+, a+, 그리고 r+?

특히,이 문서는 이들 모두가 파일에 쓸 수 있음을 의미하며, “추가”, “쓰기”및 “업데이트”를 위해 파일을 열지 만이 용어의 의미를 정의하지는 않는다고 말합니다.



답변

오프닝 모드는 C 표준 라이브러리 기능과 동일합니다 fopen().

BSD fopen맨 페이지 는 다음과 같이 정의합니다.

 The argument mode points to a string beginning with one of the following
 sequences (Additional characters may follow these sequences.):

 ``r''   Open text file for reading.  The stream is positioned at the
         beginning of the file.

 ``r+''  Open for reading and writing.  The stream is positioned at the
         beginning of the file.

 ``w''   Truncate file to zero length or create text file for writing.
         The stream is positioned at the beginning of the file.

 ``w+''  Open for reading and writing.  The file is created if it does not
         exist, otherwise it is truncated.  The stream is positioned at
         the beginning of the file.

 ``a''   Open for writing.  The file is created if it does not exist.  The
         stream is positioned at the end of the file.  Subsequent writes
         to the file will always end up at the then current end of file,
         irrespective of any intervening fseek(3) or similar.

 ``a+''  Open for reading and writing.  The file is created if it does not
         exist.  The stream is positioned at the end of the file.  Subse-
         quent writes to the file will always end up at the then current
         end of file, irrespective of any intervening fseek(3) or similar.


답변

나는 매번 모드 사이의 주요 차이점이 무엇인지에 대한 정신적 인 이미지를 만들기 위해 Google을 다시 열어야한다는 것을 알았습니다. 그래서 다음에 다이어그램을 읽는 것이 더 빠를 것이라고 생각했습니다. 다른 사람도 도움이 될 것입니다.


답변

테이블 형식으로 된 동일한 정보

                  | r   r+   w   w+   a   a+
------------------|--------------------------
read              | +   +        +        +
write             |     +    +   +    +   +
write after seek  |     +    +   +
create            |          +   +    +   +
truncate          |          +   +
position at start | +   +    +   +
position at end   |                   +   +

의미는 다음과 같습니다 (오해를 피하기 위해)

  • 읽기-파일에서 읽기가 허용됩니다
  • 쓰기-파일 쓰기가 허용됩니다

  • create-파일이 없으면 작성됩니다.

  • 잘림-파일을 여는 동안 파일이 비워집니다 (파일의 모든 내용이 지워짐)

  • 시작 위치-파일을 연 후 초기 위치는 파일 시작으로 설정됩니다.

  • 끝 위치-파일을 연 후 초기 위치는 파일 끝으로 설정됩니다.

참고 : aa+항상 파일의 끝에 추가 – 모든 무시 seek움직임을.
BTW. a+모드 에서 열린 새 파일의 경우 적어도 내 win7 / python2.7에서 재미있는 동작 :
write('aa'); seek(0, 0); read(1); write('b')-초 write는 무시됩니다
write('aa'); seek(0, 0); read(2); write('b')-두 번째 write인상IOError


답변

옵션은 C 표준 라이브러리 의 fopen 함수 와 동일 합니다.

w 파일을 잘라내어 이미 있던 내용을 덮어 씁니다.

a 파일에 추가하여 이미 존재하는 모든 것을 추가합니다.

w+ 읽고 쓰기 위해 파일을 자르면서 파일에 쓰여진 내용을 다시 읽을 수 있도록 엽니 다

a+ 파일을 추가하고 내용을 읽을 수 있도록 추가 및 읽기를 위해 열립니다.


답변

나는 이것이 플랫폼 간 실행, 즉 CYA와 같이 고려하는 것이 중요하다고 생각합니다. 🙂

Windows에서 모드에 추가 된 ‘b’는 파일을 이진 모드로 열리므로 ‘rb’, ‘wb’및 ‘r + b’와 같은 모드도 있습니다. Windows의 Python은 텍스트 파일과 이진 파일을 구분합니다. 텍스트 파일의 줄 끝 문자는 데이터를 읽거나 쓸 때 자동으로 약간 변경됩니다. 파일 데이터에 대한 이러한 비하인드 수정은 ASCII 텍스트 파일에 적합하지만 JPEG 또는 EXE 파일에서와 같은 이진 데이터를 손상시킵니다. 이러한 파일을 읽고 쓸 때 바이너리 모드를 사용하도록주의하십시오. 유닉스에서는 ‘b’를 모드에 추가하는 것이 아프지 않으므로 모든 바이너리 파일에 대해 플랫폼 독립적으로 사용할 수 있습니다.

이것은 Python Software Foundation 2.7.x 에서 직접 인용되었습니다 .


답변

왜 ‘w +’대 ‘w’모드를 사용하는지 알아 내려고 노력했습니다. 결국, 나는 약간의 테스트를했다. 두 가지 경우 모두 파일이 잘 리기 때문에 ‘w +’모드의 목적이별로 보이지 않습니다. 그러나 ‘w +’를 사용하면 다시 검색하여 글을 읽은 후 읽을 수 있습니다. ‘w’를 사용하여 읽기를 시도하면 IOError가 발생합니다. ‘w +’모드에서 탐색을 사용하지 않고 읽는 것은 파일 포인터가 작성한 위치를 따르기 때문에 아무 것도 산출하지 않습니다.


답변