[python] 파이썬에서 open () 파일이 존재하지 않으면 파일을 만들지 않습니다

파일이있는 경우 읽기 / 쓰기로 파일을 열거 나없는 경우 파일을 만들어서 읽기 / 쓰기로 여는 가장 좋은 방법은 무엇입니까? 내가 읽은 것에서 이것을 file = open('myfile.dat', 'rw')해야합니까?

그것은 나를 위해 작동하지 않으며 (Python 2.6.2) 버전 문제인지, 아니면 그렇게 작동하지 않아야하는지 궁금합니다.

결론은 문제에 대한 해결책이 필요하다는 것입니다. 나는 다른 것들에 대해 궁금하지만, 필요한 것은 오프닝 부분을 수행하는 좋은 방법입니다.

둘러싸는 디렉토리는 다른 사람이 아닌 사용자와 그룹이 쓸 수 있었으며 (나는 Linux 시스템에 있습니다 … 다른 말로 권한 775입니다) 정확한 오류는 다음과 같습니다.

IOError : 해당 파일이나 디렉토리가 없습니다.



답변

open다음 w+모드 와 함께 사용해야 합니다.

file = open('myfile.dat', 'w+')


답변

다음 접근 방식의 장점은 도중에 예외가 발생하더라도 파일이 블록의 끝에 올바르게 닫히는 것입니다. 와 동일 try-finally하지만 훨씬 짧습니다.

with open("file.dat","a+") as f:
    f.write(...)
    ...

a + 추가 및 읽기 용 파일을 엽니 다. 파일이 존재하면 파일 포인터는 파일의 끝에 있습니다. 추가 모드에서 파일이 열립니다. 파일이 존재하지 않으면 읽고 쓸 새 파일을 작성합니다. – 파이썬 파일 모드

seek () 메소드 는 파일의 현재 위치를 설정합니다.

f.seek(pos [, (0|1|2)])
pos .. position of the r/w pointer
[] .. optionally
() .. one of ->
  0 .. absolute position
  1 .. relative position to current
  2 .. relative position from end

“rwab +”문자 만 허용됩니다. 이 “RWA”정확히 하나 여야합니다 – 스택 오버플로 질문을 참조 파이썬 파일 모드 세부 사항 .


답변

다음을 사용하는 것이 좋습니다.

import os

writepath = 'some/path/to/file.txt'

mode = 'a' if os.path.exists(writepath) else 'w'
with open(writepath, mode) as f:
    f.write('Hello, world!\n')


답변

“rw”를 “w +”로 변경

또는 추가하려면 ‘a +’를 사용하십시오 (기존 컨텐츠를 지우지 않음)


답변

>>> import os
>>> if os.path.exists("myfile.dat"):
...     f = file("myfile.dat", "r+")
... else:
...     f = file("myfile.dat", "w")

r +는 읽기 / 쓰기를 의미합니다


답변

파이썬 3.4부터 당신이 해야 사용 pathlib“터치”파일.
이 스레드에서 제안 된 것보다 훨씬 더 우아한 솔루션입니다.

from pathlib import Path

filename = Path('myfile.txt')
filename.touch(exist_ok=True)  # will create file, if it exists will do nothing
file = open(filename)

디렉토리와 같은 것 :

filename.mkdir(parents=True, exist_ok=True)


답변

내 대답 :

file_path = 'myfile.dat'
try:
    fp = open(file_path)
except IOError:
    # If not exists, create the file
    fp = open(file_path, 'w+')