내장 파이썬에서 열린 기능, 모드 사이의 정확한 차이는 무엇인가 w
, a
, w+
, a+
, 그리고 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.
w
하고 w+
모두가 할 수있는The file is created if it does not exist
b
모드에 추가 바이너리 모드로 파일을 엽니 다, 그래서 같은 모드도 있습니다 rb
, wb
하고 r+b
. Windows의 Python은 텍스트 파일과 이진 파일을 구분합니다. 텍스트 파일의 줄 끝 문자는 데이터를 읽거나 쓸 때 자동으로 약간 변경됩니다.
+
이 경우 어떤 일관된 독립을하지 않는 a
, w
또는 r
? 아니면 패턴을 보지 못합니까? 패턴은 무엇입니까?
나는 매번 모드 사이의 주요 차이점이 무엇인지에 대한 정신적 인 이미지를 만들기 위해 Google을 다시 열어야한다는 것을 알았습니다. 그래서 다음에 다이어그램을 읽는 것이 더 빠를 것이라고 생각했습니다. 다른 사람도 도움이 될 것입니다.
a
설명은 잘못 . 쓰기는 항상 끝에 위치합니다.
Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
단지 초기 위치가 끝 이라고 말하는 것보다 다소 강한 재산 을 언급하고 있다고 생각 합니다.
테이블 형식으로 된 동일한 정보
| r r+ w w+ a a+
------------------|--------------------------
read | + + + +
write | + + + + +
write after seek | + + +
create | + + + +
truncate | + +
position at start | + + + +
position at end | + +
의미는 다음과 같습니다 (오해를 피하기 위해)
쓰기-파일 쓰기가 허용됩니다
create-파일이 없으면 작성됩니다.
잘림-파일을 여는 동안 파일이 비워집니다 (파일의 모든 내용이 지워짐)
시작 위치-파일을 연 후 초기 위치는 파일 시작으로 설정됩니다.
참고 : a
및 a+
항상 파일의 끝에 추가 - 모든 무시 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
open(file,'a'); close(); open(file,'r+')
이것을 달성 하기 위해 사용합니다.
a
및 a+
write가 항상 발생 한다는 메모를 추가 할 수 있습니다 seek()
.
옵션은 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 에서 직접 인용되었습니다 .