9

open() в Python не создает файл, если он не существует

14

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

У меня это не работает (Python 2.6.2), и я задумался, связано ли это с версией, или это не должно работать таким образом, или что-то еще.

Закрывающая директория была доступна для записи пользователем и группой, но не для других (у меня Linux... т.е. права 775). А точная ошибка была следующей:

IOError: no such file or directory.

5 ответ(ов)

11

Вы должны использовать open с режимом w+:

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

Режим w+ позволяет одновременно читать и записывать в файл. Если файл не существует, он будет создан, а если существует — его содержимое будет очищено. Не забудьте закрыть файл после завершения работы с ним, используя file.close(), или лучше использовать конструкцию with, чтобы автоматически закрывать файл:

with open('myfile.dat', 'w+') as file:
    # Ваш код для чтения и записи в файл
0

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

  • w — режим записи (write mode)
  • r — режим чтения (read mode)
  • a — режим добавления (append mode)

Также существуют комбинированные режимы:

  • w+ — создаёт файл, если он не существует, и открывает его в режиме записи.
  • r+ — открывает файл для чтения и записи, но не создаёт новый файл, если он отсутствует.
  • a+ — создаёт файл, если он не существует, и открывает его в режиме добавления.

Пример использования:

file_name = 'my_file.txt'
f = open(file_name, 'w+')  # открываем файл в режиме записи
f.write('python rules')
f.close()

В этом примере создаётся (или перезаписывается, если файл уже существует) файл my_file.txt, и в него записывается строка 'python rules'. Обратите внимание, что в данном коде вы находитесь в рабочем каталоге, где этот файл будет создан.

[Кстати, я использую Python версии 3.6.2]

0

Хорошей практикой является использование следующего кода:

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')

В этом примере проверяется, существует ли уже файл по заданному пути. Если файл существует, используется режим 'a' (добавление), иначе - режим 'w' (запись с перезаписью). Это позволяет избежать потери данных, если вы хотите сохранять информацию в уже существующий файл.

0

С 3.4 версии Python рекомендуется использовать модуль pathlib для "создания" файлов. Это гораздо более элегантное решение по сравнению с предложенными в этой теме.

Вот пример:

from pathlib import Path

filename = Path('myfile.txt')
filename.touch(exist_ok=True)  # создаст файл, если он не существует, иначе ничего не произойдёт
file = open(filename)

Аналогично можно создать директорию:

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

Такой подход делает код более читаемым и удобным для работы с файловой системой.

0

Чтобы изменить режим открытия файла с "rw" на "w+", просто замените "rw" на "w+" в вашем коде. Например:

with open('filename.txt', 'w+') as file:
    # Ваш код здесь

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

with open('filename.txt', 'a+') as file:
    # Ваш код здесь

Таким образом, вы сможете добавлять данные к уже имеющемуся содержимому файла, не очищая его.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь