Вопрос-Ответ

Confused by python file mode "w+" [duplicate]

Сбит с толку файловым режимом python "w +"

Из документа,


Режимы 'r +', 'w +' и 'a +' открывают файл для обновления (обратите внимание, что 'w +' усекает файл). Добавьте 'b' к режиму, чтобы открыть файл в двоичном режиме, в системах, которые различают двоичные и текстовые файлы; в системах, которые не имеют такого различия, добавление 'b' не имеет эффекта.


и здесь


w+ : открывает файл как для записи, так и для чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.


Но, как прочитать файл, открытый с помощью w+?

Переведено автоматически
Ответ 1

Вот список различных режимов открытия файла:


  • r



    Открывает файл только для чтения. Указатель на файл размещается в начале файла. Это режим по умолчанию.



  • rb



    Открывает файл для чтения только в двоичном формате. Указатель на файл размещается в начале файла. Это режим по умолчанию.



  • r +



    Открывает файл как для чтения, так и для записи. Указатель на файл будет находиться в начале файла.



  • rb +



    Открывает файл как для чтения, так и для записи в двоичном формате. Указатель на файл будет находиться в начале файла.



  • w



    Открывает файл только для записи. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.



  • wb



    Открывает файл для записи только в двоичном формате. Перезаписывает файл, если файл существует. Если файл не существует, создает новый файл для записи.



  • w+



    Открывает файл как для записи, так и для чтения. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.



  • wb +



    Открывает файл как для записи, так и для чтения в двоичном формате. Перезаписывает существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.



  • a



    Открывает файл для добавления. Указатель на файл находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, создается новый файл для записи.



  • ab



    Открывает файл для добавления в двоичном формате. Указатель на файл находится в конце файла, если файл существует. То есть файл находится в режиме добавления. Если файл не существует, создается новый файл для записи.



  • a +



    Открывает файл как для добавления, так и для чтения. Указатель на файл находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, создается новый файл для чтения и записи.



  • ab+



    Открывает файл как для добавления, так и для чтения в двоичном формате. Указатель на файл находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, создается новый файл для чтения и записи.



Ответ 2

Все файловые режимы в Python


  • r для чтения

  • r+ открывается для чтения и записи (невозможно обрезать файл)

  • w для записи

  • w+ для записи и чтения (может усекать файл)

  • rb для чтения двоичного файла. Указатель на файл размещается в начале файла.

  • rb+ чтение или запись двоичного файла

  • wb+ запись двоичного файла

  • a+ открывается для добавления

  • ab+ Открывает файл как для добавления, так и для чтения в двоичном формате. Указатель на файл находится в конце файла, если файл существует. Файл открывается в режиме добавления.

  • x открыть для эксклюзивного создания, не удается, если файл уже существует (Python 3)

Ответ 3

Допустим, вы открываете файл с помощью 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() вызов попытается прочитать с конца файла и вернет пустую строку.

Ответ 4

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
$
python file