open () в Python не создает файл, если он не существует - PullRequest
564 голосов
/ 03 июня 2010

Каков наилучший способ открыть файл для чтения / записи, если он существует, а если нет, то создать его и открыть для чтения / записи? Из того, что я прочитал, file = open('myfile.dat', 'rw') должен сделать это, верно?

Это не работает для меня (Python 2.6.2), и мне интересно, если это проблема с версией, или не должен работать так или что.

Суть в том, что мне просто нужно решение проблемы. Мне интересно все остальное, но все, что мне нужно, это хороший способ сделать вступительную часть.

ОБНОВЛЕНИЕ: вмещающий каталог был доступен для записи пользователю и группе, а не другим (я в системе Linux ... так что разрешения 775 другими словами), и точная ошибка была:

IOError: нет такого файла или каталога.

Ответы [ 16 ]

5 голосов
/ 30 декабря 2017
'''
w  write mode
r  read mode
a  append mode

w+  create file if it doesn't exist and open it in write mode
r+  open for reading and writing. Does not create file.
a+  create file if it doesn't exist and open it in append mode
'''

пример:

file_name = 'my_file.txt'
f = open(file_name, 'w+')  # open file in write mode
f.write('python rules')
f.close()

Надеюсь, это поможет. [К вашему сведению, я использую Python версии 3.6.2]

5 голосов
/ 11 октября 2015

Поставьте w + для записи файла, обрезать, если он существует, r + для чтения файла, создать его, если он не существует, но не записать (и вернуть ноль), или + для создания нового файла или добавления к существующему .

4 голосов
/ 12 января 2018

Если вы хотите открыть его для чтения и записи, я предполагаю, что вы не хотите обрезать его при открытии и хотите иметь возможность прочитать файл сразу после его открытия. Вот решение, которое я использую:

file = open('myfile.dat', 'a+')
file.seek(0, 0)
4 голосов
/ 02 февраля 2015

Использование:

import os

f_loc = r"C:\Users\Russell\Desktop\ip_addr.txt"

if not os.path.exists(f_loc):
    open(f_loc, 'w').close()

with open(f_loc) as f:
    #Do stuff

Убедитесь, что вы закрыли файлы после того, как открыли их. with менеджер контекста сделает это за вас.

1 голос
/ 08 августа 2018
import os, platform
os.chdir('c:\\Users\\MS\\Desktop')

try :
    file = open("Learn Python.txt","a")
    print('this file is exist')
except:
    print('this file is not exist')
file.write('\n''Hello Ashok')

fhead = open('Learn Python.txt')

for line in fhead:

    words = line.split()
print(words)
1 голос
/ 14 декабря 2017

То есть вы хотите записать данные в файл, но только если его еще нет?

Эта проблема легко решается с помощью малоизвестного режима x для открытия () вместо обычного режима w. Например:

 >>> with open('somefile', 'wt') as f:
 ...     f.write('Hello\n')
...
>>> with open('somefile', 'xt') as f:
...     f.write('Hello\n')
...
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'somefile'
  >>>

Если файл в двоичном режиме, используйте режим xb вместо xt.

...