로부터 문서 ,
‘r +’, ‘w +’및 ‘a +’모드는 업데이트 할 파일을 엽니 다 ( ‘w +’는 파일을 자릅니다). 이진 파일과 텍스트 파일을 구분하는 시스템에서 이진 모드로 파일을 여는 모드에 ‘b’를 추가하십시오. 이러한 구분이없는 시스템에서는 ‘b’를 추가해도 아무런 영향이 없습니다.
그리고 여기
w + : 쓰기와 읽기를위한 파일을 엽니 다. 파일이 존재하면 기존 파일을 덮어 씁니다. 파일이 존재하지 않으면 읽고 쓸 새 파일을 작성하십시오.
그러나 파일을 읽는 방법은 w+
무엇입니까?
답변
당신이 with
해야 할 것과 같은 진술로 파일을 열고 있다고 가정 해 봅시다 . 그런 다음 파일에서 읽을 다음과 같은 작업을 수행하십시오.
with open('somefile.txt', 'w+') as f:
# Note that f has now been truncated to 0 bytes, so you'll only
# be able to read data that you write after this point
f.write('somedata\n')
f.seek(0) # Important: return to the top of the file before reading, otherwise you'll just read an empty string
data = f.read() # Returns 'somedata\n'
참고 f.seek(0)
– 당신이 잊어 버린 경우 f.read()
호출은 파일의 끝에서 읽으려고하며, 빈 문자열을 반환합니다.
답변
다음은 파일을 여는 다양한 모드 목록입니다.
-
아르 자형
읽기 전용으로 파일을 엽니 다. 파일 포인터는 파일의 시작 부분에 있습니다. 이것이 기본 모드입니다.
-
rb
이진 형식으로 만 읽을 수 있도록 파일을 엽니 다. 파일 포인터는 파일의 시작 부분에 있습니다. 이것이 기본 모드입니다.
-
r +
읽고 쓸 수있는 파일을 엽니 다. 파일 포인터는 파일의 시작 부분에 있습니다.
-
rb +
이진 형식으로 읽고 쓸 수있는 파일을 엽니 다. 파일 포인터는 파일의 시작 부분에 있습니다.
-
승
쓰기 전용으로 파일을 엽니 다. 파일이 존재하면 파일을 덮어 씁니다. 파일이 존재하지 않으면 새 파일을 작성합니다.
-
wb
이진 형식으로 만 쓸 파일을 엽니 다. 파일이 존재하면 파일을 덮어 씁니다. 파일이 존재하지 않으면 새 파일을 작성합니다.
-
w +
쓰기와 읽기를위한 파일을 엽니 다. 파일이 존재하면 기존 파일을 덮어 씁니다. 파일이 존재하지 않으면 읽고 쓸 새 파일을 작성하십시오.
-
wb +
이진 형식으로 읽고 쓸 수있는 파일을 엽니 다. 파일이 존재하면 기존 파일을 덮어 씁니다. 파일이 존재하지 않으면 읽고 쓸 새 파일을 작성하십시오.
-
ㅏ
추가 할 파일을 엽니 다. 파일이 존재하면 파일 포인터는 파일의 끝에 있습니다. 즉, 파일이 추가 모드에 있습니다. 파일이 존재하지 않으면 새 파일을 작성합니다.
-
ab
이진 형식으로 추가 할 파일을 엽니 다. 파일이 존재하면 파일 포인터는 파일의 끝에 있습니다. 즉, 파일이 추가 모드에 있습니다. 파일이 존재하지 않으면 새 파일을 작성합니다.
-
a +
추가하고 읽을 파일을 엽니 다. 파일이 존재하면 파일 포인터는 파일의 끝에 있습니다. 추가 모드에서 파일이 열립니다. 파일이 존재하지 않으면 읽고 쓸 새 파일을 작성합니다.
-
ab +
이진 형식으로 추가하고 읽을 수있는 파일을 엽니 다. 파일이 존재하면 파일 포인터는 파일의 끝에 있습니다. 추가 모드에서 파일이 열립니다. 파일이 존재하지 않으면 읽고 쓸 새 파일을 작성합니다.
답변
파이썬의 모든 파일 모드
r
독서r+
읽고 쓰기 위해 열립니다 (파일을자를 수 없습니다)w
쓰기w+
쓰기 및 읽기 용 (파일 자르기 가능)rb
이진 파일을 읽는 데 사용됩니다. 파일 포인터는 파일의 시작 부분에 있습니다.rb+
이진 파일 읽기 또는 쓰기wb+
이진 파일 작성a+
추가를 위해 열린다ab+
이진으로 추가하고 읽을 수있는 파일을 엽니 다. 파일이 존재하면 파일 포인터는 파일의 끝에 있습니다. 추가 모드에서 파일이 열립니다.x
파일이 이미 존재하는 경우 독점 생성을 위해 열기 (Python 3)
답변
r
읽다
w
쓰기
r+
파일이 존재하는 경우 원본 컨텐츠를 삭제하지 않고 읽기 / 쓰기 용, 그렇지 않으면 예외 발생
w+
원본 내용을 삭제 한 다음 파일이 있으면 읽기 / 쓰기, 그렇지 않으면 파일을 만듭니다.
예를 들어
>>> with open("file1.txt", "w") as f:
... f.write("ab\n")
...
>>> with open("file1.txt", "w+") as f:
... f.write("c")
...
$ cat file1.txt
c$
>>> with open("file2.txt", "r+") as f:
... f.write("ab\n")
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'file2.txt'
>>> with open("file2.txt", "w") as f:
... f.write("ab\n")
...
>>> with open("file2.txt", "r+") as f:
... f.write("c")
...
$ cat file2.txt
cb
$
답변
파일이 잘 리므로 호출 할 수 있습니다read()
( ‘w’를 사용하여 열 때와 달리 예외는 발생하지 않음). 빈 문자열이 나타납니다.
답변
나는 당신이 달성하려고 생각하는 것을 처리하는 두 가지 방법이 있다고 생각합니다.
1) 분명한 것은 읽기 전용 파일을 열고 메모리로 읽은 다음 t로 파일을 연 다음 변경 사항을 작성하는 것입니다.
2) 낮은 수준의 파일 처리 루틴을 사용하십시오.
# Open file in RW , create if it doesn't exist. *Don't* pass O_TRUNC
fd = os.open(filename, os.O_RDWR | os.O_CREAT)
도움이 되었기를 바랍니다..
답변
사실, r+
모드 에 대한 다른 모든 대답에는 잘못된 것이 있습니다.
test.in
파일 내용 :
hello1
ok2
byebye3
그리고 py 스크립트의 :
with open("test.in", 'r+')as f:
f.readline()
f.write("addition")
실행하면 test.in
의 내용이 다음과 같이 변경됩니다.
hello1
ok2
byebye3
addition
그러나 스크립트를 다음과 같이 수정하면
with open("test.in", 'r+')as f:
f.write("addition")
는 test.in
또한 응답을 수행합니다
additionk2
byebye3
따라서이 r+
모드에서는 읽기 작업을 수행하지 않은 경우 처음부터 내용을 다룰 수 있습니다. 그리고 우리가 읽기 작업 f.write()
을 수행하면 파일에 추가됩니다.
그건 그렇고, 우리가 f.seek(0,0)
전에 f.write(write_content)
라면 write_content는 positon (0,0)에서 그것들을 덮을 것입니다.
