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