как открыть файл в режиме чтения и добавления в python одновременно в одной переменной - PullRequest
0 голосов
/ 30 мая 2019

если мы используем 'r', он будет читать файл 'w' запишет в файл с самого начала, а 'a' добавит, как открыть в read и добавить одновременно

ошибка: в этом>> open ("имя файла", "r, a")

open("filename", "w")
open("filename", "r")
open("filename", "a")

ошибка: недопустимый режим: 'a, r'

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Вы ищете режим r+ или a+, который позволяет выполнять операции чтения и записи в файлы ( см. Подробнее ).

При r+ позиция изначально находится в начале, но чтение ее один раз подтолкнет ее к концу, что позволит вам добавить.При a+ позиция изначально находится в конце.

with open("filename", "r+") as f:
    text = f.read()
    f.write("stuff to append")

Если вам когда-либо понадобится выполнить полное перечитывание, вы можете вернуться в исходную позицию, выполнив f.seek(0).

with open("filename", "r+") as f:
    text = f.read()
    f.write("stuff to append")

    f.seek(0)
    text = f.read()

    assert text.endswith("stuff to append")
0 голосов
/ 30 мая 2019

Вы не можете сделать это с текстовым файлом. Либо вы хотите прочитать это, либо вы хотите написать в него. a или r указывает seek для определенного местоположения в файле. Если указать оба параметра, open будет указывать на два разных места в файле одновременно.

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

После этого у вас есть два файла, поэтому вы должны позаботиться об удалении старого. Если это хлопотно, взгляните на модуль in-place.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...