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")