Arquivos
Um arquivo é um conjunto de dados na memória externa que tem um nome.
Existem dois tipos de arquivos em Python:
- texto, que contém texto quebrado em uma linha; Dos caracteres especiais em arquivos de texto, só pode haver caracteres de nova linha (" \n") e retornar ao início da linha (" \r" ;);
- binário, que armazena quaisquer dados binários sem restrições (por exemplo, imagens, sons, vídeos, etc.).
A seguir, consideraremos o trabalho com arquivos de texto.
O princípio de trabalhar com um arquivo do programa
Consiste em três etapas:
1. abrindo um arquivo;
2. trabalhe com o arquivo;
3. fechando o arquivo.
Este princípio de operação é chamado de "princípio do sanduíche"..
Ao abrir um arquivo, é indicado o modo de operação: leitura, escrita ou anexação de dados ao final do arquivo. O arquivo aberto está bloqueado e outros programas não podem acessá-lo. Depois de trabalhar com o arquivo, você deve fechá-lo para interromper a conexão com o programa. Quando um arquivo é fechado, todas as alterações feitas pelo programa nesse arquivo são gravadas no disco. Python trabalha com arquivos por meio de variáveis de arquivo.
A função open() permite abrir um arquivo e retorna uma variável de arquivo que pode ser usada para acessar o arquivo.
f = open(file_name, access_mode),
onde:
- file_name - nome do arquivo a ser aberto
- access_mode - modo de abertura de arquivo. Pode ser: ler, escrever, etc. O modo padrão é ler (r), salvo indicação em contrário.
Lista completa de modos de abertura de arquivo
| Modo |
Descrição |
r |
Somente leitura. |
w |
Somente gravável. Irá criar um novo arquivo se não for encontrado com o nome especificado. |
rb |
Somente leitura (binário). |
wb |
Somente gravação (binário). Irá criar um novo arquivo se não for encontrado com o nome especificado. |
r+ |
Para ler e escrever. |
rb+ |
Para leitura e escrita (binário). |
w+ |
Para ler e escrever. Irá criar um novo arquivo gravável se não for encontrado com o nome especificado. |
wb+ |
Para leitura e escrita (binário). Irá criar um novo arquivo gravável se não for encontrado com o nome especificado. |
a |
Abre para adicionar novo conteúdo. Irá criar um novo arquivo gravável se não for encontrado com o nome especificado. |
a+ |
Abre para adicionar novo conteúdo. Irá criar um novo arquivo para ler a entrada se não for encontrado com o nome especificado. |
ab |
Abre para adicionar novo conteúdo (binário). Irá criar um novo arquivo gravável se não for encontrado com o nome especificado. |
ab+ |
Abre para adicionar novo conteúdo (binário). Irá criar um novo arquivo para ler a entrada se não for encontrado com o nome especificado. |
O método close() permite que você feche um arquivo.
Exemplo
Fin = open("input.txt")
Fout = open("output.txt")
# fazer algo com arquivos
fout.close()
Fin.close()
Se um arquivo existente for aberto para gravação, seu conteúdo será destruído. Após o término do programa, todos os arquivos abertos são fechados automaticamente.
|
Lendo dados de um arquivo
Ao ler um arquivo de texto, o fluxo de bytes entra na entrada do programa sequencialmente, um após o outro, de modo que o arquivo fornece acesso sequencial aos dados. Ou seja, se precisarmos ler o 10º valor do arquivo, primeiro devemos ler os 9 anteriores.
A leitura de uma única linha de um arquivo permite que o método readline() seja executado. Este método é chamado em uma variável de arquivo.
Fin = open("input.txt")
s = Fin.readline()
Vários métodos podem ser aplicados à string lida, semelhantes aos usados na leitura do teclado (split(), map(), etc.). Por exemplo, se houver dois números separados por um espaço em uma linha de um arquivo, você poderá contá-los da seguinte maneira:
Fin = open("input.txt")
s = Fin.readline().split() # divide a linha nos espaços s = ["2007", "2021"]
a, b = map(int, s) # aplica o método int() a todos os elementos da lista s,
# ou seja, converte a cadeia de caracteres em um número
# a, b = int(s[0], s[1]) # isso é o mesmo que a linha acima
# a, b = [int(x) for x in s] # o mesmo que um gerador
O método read() lê todo o conteúdo do arquivo e retorna uma string que pode conter os caracteres '\n'. Se um parâmetro inteiro for passado para o método read(), não mais do que o número especificado de caracteres será lido. Por exemplo, você pode ler um arquivo byte por byte usando o método read(1). .
Quando um arquivo é aberto, o ponteiro que determina a localização atual no arquivo é colocado no início do arquivo e, quando lido, é deslocado para a posição seguinte à leitura dos dados. Ao escrever, o ponteiro é movido para a próxima posição livre.
|
Gravar dados no arquivo
O método write() é usado para gravar dados em um arquivo. Os dados numéricos devem ser convertidos em uma string. Isso pode ser feito com o método format() ou com o método str().
Arquivos de múltiplas linhas
Ao trabalhar com arquivos de várias linhas, você precisa saber quando os dados do arquivo acabam. Para fazer isso, você pode usar o recurso dos métodos readline(): se o cursor do arquivo apontar para o final do arquivo, o método readline() retornará um string vazia, que é percebida como um valor booleano falso:
enquanto verdadeiro:
s = Fin.readline()
se não s: break # se uma string vazia for recebida ao ler uma string,
# o loop termina com uma instrução break
print(s, end="") # desabilita a nova linha, pois ao ler uma linha de um arquivo
# caractere de nova linha "\n" salvo
Outras formas de ler dados de arquivos multilinha
1. Imediatamente todos os dados da lista.
Fin = open("input.txt")
list_strings = Fin.readlines() # lê todas as linhas de uma vez
Fin.close()
para s em list_strings:
print(s, end="")
2. Usando a construção with-as. Neste caso, o arquivo é fechado automaticamente após o término do ciclo.
com open("input.txt") como Fin:
para s em Fin:
print(s, end="")
Essa construção garante que o arquivo seja fechado.
3. Uma forma de iterar sobre strings no estilo da linguagem Python (recomenda-se usar este método). Nesse caso, o arquivo também é fechado automaticamente.
para s em open("input.txt"):
print(s, end=""")
|
Arquivo cirílico
Se o arquivo contiver letras russas (qualquer caractere com um código maior que 127), você deverá especificar a codificação ao abrir
data = open("input.txt", "r", encoding="utf-8")
|