Você está na página 1de 4

Carácter Significado

'r' Open for reading (default)

'w' Open for writing, truncating (overwriting) the file first

'rb' or 'wb' Open in binary mode (read/write using byte data)

Leitura e gravação de arquivos abertos

Método O que isto faz

.read(size=-1) Isso lê o arquivo com base no número de bytes de tamanho. Se


nenhum argumento for passado ou none ou -1 for passado, o
arquivo inteiro será lido.

.readline(size=-1) Isso lê no máximo o número de caracteres da linha. Isso continua


até o final da linha e depois volta. Se nenhum argumento for
passado ou None ou -1 for passado, a linha inteira (ou o restante da
linha) será lida.

.readlines() Isso lê as linhas restantes do objeto de arquivo e as retorna como


uma lista.

Agora vamos mergulhar na gravação de arquivos. Assim como na leitura de arquivos, os


objetos de arquivo têm vários métodos úteis para gravar em um arquivo:

Método O que isto faz

.write(string) Isso grava a sequência no arquivo

.writelines(seq) Isso grava a sequência no arquivo. Nenhuma extremidade de linha


é anexada a cada item de sequência. Cabe a você adicionar os
finais de linha apropriados.

Aqui está um exemplo rápido de como usar .write () e .writelines ():

with open('dog_breeds.txt', 'r') as reader:


# Nota: as linhas de leitura não cortam as terminações das linhas

dog_breeds = reader.readlines()

with open('dog_breeds_reversed.txt', 'w') as writer:


# Como alternativa, você pode usar
# writer.writelines(reversed(dog_breeds))
# Escreva as raças de cães no arquivo em ordem inversa

for breed in reversed(dog_breeds):

writer.write(breed)
Trabalhando com bytes

Às vezes, pode ser necessário trabalhar com arquivos usando cadeias de


bytes. Isso é feito adicionando o caractere 'b' ao argumento mode.
Todos os mesmos métodos para o objeto de arquivo se aplicam. No
entanto, cada um dos métodos espera e retorna um objeto de bytes:

>>> with open('dog_breeds.txt', 'rb') as reader:


>>> print(reader.readline())
b'Pug\n'

Você pode realmente abrir esse arquivo no Python e examinar o conteúdo! Como o formato
do arquivo .png está bem definido, o cabeçalho do arquivo é dividido em 8 bytes, assim:

Value Interpretation
0x89 A “magic” number to indicate that this is the start of a PNG
0x50 0x4E 0x47 PNG in ASCII

0x0D 0x0A A DOS style line ending \r\n


0x1A A DOS style EOF character
0x0A A Unix style line ending \n

Vamos trazer tudo isso para casa e ver um exemplo completo de como ler e gravar em um
arquivo. A seguir está uma ferramenta semelhante ao dos2unix que converterá um arquivo
que contém as terminações de linha de \ r \ n em \ n.

Essa ferramenta é dividida em três seções principais. O primeiro é str2unix (), que
converte uma string de \ r \ n finais de linha em \ n. O segundo é dos2unix (), que
converte uma string que contém \ r \ n caracteres em \ n. dos2unix () chama
str2unix () internamente. Por fim, existe o bloco __main__, que é chamado apenas
quando o arquivo é executado como um script. Pense nisso como a principal função
encontrada em outras linguagens de programação.
Tips and Tricks (Dicas e truques)

__File__

O atributo __file__ é um atributo especial dos módulos, semelhante ao __name__.

Isto é: “O nome do caminho do arquivo no qual o módulo foi carregado, se foi carregado de
um arquivo.”

Nota: Para reiterar, __file__ retorna o caminho relativo ao local em que o script Python inicial foi
chamado. Se você precisar do caminho completo do sistema, poderá usar os.getcwd () para obter o
diretório de trabalho atual do seu código de execução.

Aqui está um exemplo do mundo real. Em um dos meus trabalhos anteriores, fiz vários testes
para um dispositivo de hardware. Cada teste foi escrito usando um script Python com o nome
do arquivo do script de teste usado como título. Esses scripts seriam executados e poderiam
imprimir seu status usando o atributo especial __file__. Aqui está um exemplo de estrutura de
pastas:

Appending to a File (Anexando a um arquivo)


Às vezes, convém anexar a um arquivo ou começar a escrever no final de um arquivo já
preenchido. Isso é feito facilmente usando o caractere 'a' para o argumento mode:

with open('dog_breeds.txt', 'a') as a_writer:


a_writer.write('\nBeagle')

desta maneira é adicionado ao final da lista a raça de cão Beagle.

Working With Two Files at the Same Time


Há momentos em que você pode querer ler um arquivo e gravar em outro arquivo ao mesmo
tempo. Se você usar o exemplo que foi mostrado quando estava aprendendo a gravar em um
arquivo, ele poderá realmente ser combinado com o seguinte:

d_path = 'dog_breeds.txt'
d_r_path = 'dog_breeds_reversed.txt'
with open(d_path, 'r') as reader, open(d_r_path, 'w') as writer:
dog_breeds = reader.readlines()
writer.writelines(reversed(dog_breeds))
Creating Your Own Context Manager(Criando seu próprio gerenciador de contexto)
Pode chegar um momento em que você precisará de um controle mais preciso do objeto de
arquivo, colocando-o dentro de uma classe personalizada. Quando você faz isso, o uso da
instrução with não pode mais ser usado, a menos que você adicione alguns métodos mágicos:
__enter__ e __exit__. Ao adicionar esses itens, você criará o que é chamado de gerenciador de
contexto.

__enter __ () é chamado ao chamar a instrução with. __exit __ () é chamado ao sair do bloco


de instrução with.

Aqui está um modelo que você pode usar para criar sua classe personalizada:

Você também pode gostar