Режимы чтения и записи файлов

Режимы чтения и записи определены [python-buildin-functions] open(file, mode='r', buffering=- 1, encoding=None, errors=None, newline=None, closefd=True, opener=None) (смотри докумсентацию)

Функция открывает файл и воозвращает соответствующий файловый объект. Если файл не может быть открыт, возникает ошибка OSError.

Вот тут примеры

file — это объект, подобный пути, задающий путь (абсолютный или относительный к текущему рабочему каталогу) файла, который нужно открыть, или целочисленный файловый дескриптор файла, который нужно обернуть. (Если указан файловый дескриптор, он закрывается при закрытии возвращаемого объекта ввода-вывода, если только для параметра closefd не задано значение False.)

mode — необязательная строка, указывающая режим, в котором открывается файл. По умолчанию это r.

mode-string  | truncate? | create? | what's allowed
-------------+-----------+---------+----------------
     r       |    no     |  no     |  reading (only)
     w       |    yes    |  yes    |  writing (only)
     a       |    no     |  yes    |  writing (only), auto-appends
     r+      |    no     |  no     |  read and write
     w+      |    yes    |  yes    |  read and write
     a+      |    no     |  yes    |  read and (auto-appending) write

Источник на оверфло

 The argument mode points to a string beginning with one of the following
 sequences (Additional characters may follow these sequences.):

 ``r''   Open text file for reading.  The stream is positioned at the
         beginning of the file.

 ``r+''  Open for reading and writing.  The stream is positioned at the
         beginning of the file.

 ``w''   Truncate file to zero length or create text file for writing.
         The stream is positioned at the beginning of the file.

 ``w+''  Open for reading and writing.  The file is created if it does not
         exist, otherwise it is truncated.  The stream is positioned at
         the beginning of the file.

 ``a''   Open for writing.  The file is created if it does not exist.  The
         stream is positioned at the end of the file.  Subsequent writes
         to the file will always end up at the then current end of file,
         irrespective of any intervening fseek(3) or similar.

 ``a+''  Open for reading and writing.  The file is created if it does not
         exist.  The stream is positioned at the end of the file.  Subse-
         quent writes to the file will always end up at the then current
         end of file, irrespective of any intervening fseek(3) or similar.

Источник на оверфло

Важдными нюансами являются следующие аспекты:

  • какие операции можно производить над файлом
  • что происходит с содержимым
  • где оказывается курсор после открытия файла

Когда мы вызываем метод, производящий усечение файла, даже если этио режим w+ - файл будет усечен при открытии. Т.е. все что в нем находилось будет удалено - это может иметь значение, если, к примеру, нам надо открыть файл, прочитать его содержимое, сравнить с чем-то и перезаписать, если есть разница.

При откритии файла в режиме, позволяющем его дополнять, курсор помещается в конце файла.

Чтобы решить приведенную выше нестандартную задачу, возможно придется открыть файл в режиме a+, затем передвинуть курсор в начало файла и прочитать его, а затем, если нам надо полностью перезаписать содержимое - произвести усечение. Сделать это можно примерно так:

with open(file_name,"a+") as f:
    f.seek(0) # move cursor to the start of the file
    data= f.readlines()
    # do something with data
    f.truncate(0) # trunkate file
    f.write("Write new data")

Смотир еще: