[python] 파이썬 파일 모드“w +”와 혼동

로부터 문서 ,

‘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)에서 그것들을 덮을 것입니다.