No documento ,
Os modos 'r +', 'w +' e 'a +' abrem o arquivo para atualização (observe que 'w +' trunca o arquivo). Anexe 'b' ao modo para abrir o arquivo no modo binário, em sistemas que diferenciam arquivos binários e de texto; em sistemas que não têm essa distinção, adicionar o 'b' não tem efeito.
e aqui
w +: abre um arquivo para escrita e leitura. Substitui o arquivo existente, se o arquivo existir. Se o arquivo não existir, cria um novo arquivo para leitura e gravação.
Mas, como ler um arquivo aberto w+
?
Respostas:
Digamos que você esteja abrindo o arquivo com uma
with
declaração como deveria. Então você faria algo assim para ler o seu arquivo:Observe o
f.seek(0)
- se você esquecer isso, af.read()
chamada tentará ler a partir do final do arquivo e retornará uma string vazia.fonte
w+
"substituirá o arquivo existente se o arquivo existir". Então, assim que você abre um arquivow+
, ele agora é um arquivo vazio: contém 0 bytes. Se ele costumava conter dados, esses dados foram truncados - cortados e descartados - e agora o tamanho do arquivo é 0 bytes, portanto, você não pode ler nenhum dado existente antes de abrir o arquivow+
. Se você realmente queria ler os dados anteriores e adicioná-los, deve usar emr+
vez dew+
.Aqui está uma lista dos diferentes modos de abrir um arquivo:
r
rb
r +
rb +
W
wb
w +
wb +
uma
ab
a +
ab +
fonte
w+
cria um novo arquivo ou trunca um arquivo existente e o abre para leitura e gravação;r+
abre um arquivo existente sem truncá-lo para leitura e gravação. Muito diferente.r
,,w
oua
são exclusivos, masb
podem ser adicionados a qualquer um deles, como é possível+
ouU
... É uma explosão combinatória.rb
não é o modo padrão, a citar:The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r'
docs.python.org/2/library/functions.html#openTodos os modos de arquivo em Python
r
para lerr+
abre para leitura e gravação (não é possível truncar um arquivo)w
para escreverw+
para escrever e ler (pode truncar um arquivo)rb
para ler um arquivo binário. O ponteiro do arquivo é colocado no início do arquivo.rb+
lendo ou gravando um arquivo bináriowb+
escrevendo um arquivo binárioa+
abre para anexarab+
Abre um arquivo para anexar e ler em binário. O ponteiro do arquivo está no final do arquivo, se o arquivo existir. O arquivo é aberto no modo de acréscimo.x
aberto para criação exclusiva, falhando se o arquivo já existir (Python 3)fonte
rb
ewb
, sem mencionar osU
modos em 2.xe ot
modo em 3.x (que podem ser combinados com tudo, excetob
).wb+
também lê o arquivo?r
para lerw
para escreverr+
para leitura / gravação sem excluir o conteúdo original, se o arquivo existir, caso contrário, crie uma exceçãow+
para excluir o conteúdo original, leia / grave se o arquivo existir; caso contrário, crie o arquivoPor exemplo,
fonte
O arquivo está truncado, então você pode chamar
read()
(sem exceções, ao contrário de quando aberto usando 'w'), mas você obterá uma string vazia.fonte
Eu suspeito que existem duas maneiras de lidar com o que acho que você está tentando alcançar.
1) o que é óbvio, é abrir o arquivo apenas para leitura, ler na memória, abrir o arquivo com t e escrever suas alterações.
2) use as rotinas de manipulação de arquivos de baixo nível:
Espero que isto ajude..
fonte
r+
Na verdade, há algo errado em todas as outras respostas sobre o
r+
modo.test.in
conteúdo do arquivo:E o script py:
Execute-o e o
test.in
conteúdo do será alterado para:No entanto, quando modificamos o script para:
o
test.in
também responde:Portanto, o
r+
modo nos permitirá cobrir o conteúdo desde o início, se não fizermos a operação de leitura. E se fizermos alguma operação de leitura,f.write()
basta anexar ao arquivo.By the way, se
f.seek(0,0)
antesf.write(write_content)
, o write_content vai cobri-los a partir do positon (0,0).fonte
Conforme mencionado pelo h4z3 , para uso prático, às vezes seus dados são grandes demais para carregar tudo diretamente, ou você tem um gerador ou dados recebidos em tempo real, você pode usar o w + para armazenar em um arquivo e ler mais tarde.
fonte