Arquivos & Python

Algo que venho constantemente usando em meus scripts Python é a manipulação de arquivos, seja criando ou acrescendo textos. Para isso vou usar um exemplo para começar a explicar:

Text = '''
192.168.2.32
192.168.2.63
192.168.2.86
192.168.2.90
'''
 
MyFile = open('/home/krix/list_ips.txt', 'w')
MyFile.write(Text)
MyFile.close()

O código acima cria o arquivo (ou se ele já existe o sobescreve) /home/krix/list_ips.txt inserindo o texto declarado na variável Text e em seguida o fecha. Parece bem simples não é?! E é. A manipulação de arquivos com Python é realmente bem simples.

A sintaxe da função open() é:

open(arquivo[, modo[, tamanho do buffer]])

O primeiro parâmetro arquivo é obrigatório e como se pode ver é o nome e/ou caminho do arquivo a ser aberto;

O segundo parâmetro modo, que não é obrigatório, será uma string que indicará o modo como o arquivo será aberto. São eles:

  • r (read): O arquivo é aberto somente para leitura. Quando não informado o modo este será o padrão.
MyFile = open('/home/krix/list_ips.txt', 'r')
ReadingFile = MyFile.read()
MyFile.close()
print ReadingFile
  • w (write): O arquivo é aberto somente para escrita e será bloqueado caso exista subescrevendo seu conteúdo e criado se não existir.
MyFile = open('/home/krix/list_ips.txt', 'w')
MyFile.write(Text)
MyFile.close()
  • a (append): O arquivo é aberto somente para escrita contudo ao contrário do w que subescreve o conteúdo do arquivo ele irá acrescentar ao arquivo.
MyFile = open('/home/krix/list_ips.txt', 'a')
NewIPs = []
NewIPs.append(Text)
MyFile.write((' '.join(NewIPs))+"\n")
MyFile.close()

Todos os modos acima citados quando seguido do caracter mais (+) o arquivo será aberto tanto para leitura quanto para escrita.

Quando os modos r, w ou a estiver seguido do caracter b ou t isso indicará a forma de manupulação do arquivos, o b indicará que será binário e o t em texto e quando não informado o t será o padrão.

MyFile = open('/home/krix/list_ips.txt', 'w+')
MyFile = open('/home/krix/list_ips.txt', 'wb')

O terceiro parâmetro tamanho do buffer, também não obrigatório, e controla o comportamento do buffer do arquivo. Se 0 não será bufferizado, se 1 será bufferizado e se for um número positivo maior que 1 indicará o tamanho do buffer em bytes.

Acima usamos alguns métodos como o read, write e close mas não falamos nada sobre eles então abaixo irei dá uma definição a eles e a alguns outros métodos que julguei indispensáveis:

  • read(): Lê o arquivo.
MyFile.read()
  • readline(size): Lê uma só linha do arquivo. Size será a quantidade de caracteres que será lido na linha.
MyFile.readline()
  • readlines(size): Lê todas as linhas do arquivo e retorna numa lista. Size será o número de bytes a ser lido.
MyFile.readlines()
  • write(str): Escreve a string passada no arquivo.
MyFile.write(Text)
  • writelines(): Escreve no arquivo todas as strings de uma lista.
MyFile.writelines(list)

O que seria o mesmo que:

for line in list:
    MyFile.writelines(line)
  • close(): Fecha o arquivo.
MyFile.close()

No exemplo que dei mais acima quando falei sobre o modo a você percebeu que usei dois métodos que os quais ainda não tinha comentado, o join e o append. O join tem a função de concatenar uma string a outra o que seria justamente o que eu precisaria no código. O append adiciona um ítem ao final de uma lista. Dadas as definições vamos explicar: Se eu tivesse ignorado o append e usasse somente o join para adicionar o Text ao arquivo será que funcionaria sem problemas? Sim, mas sem problemas?!?! Humm, isso já seria relativo, se eu retirasse e dexasse o código assim:

MyFile = open('/home/krix/list_ips.txt', 'a')
MyFile.write((' '.join(Text))+"\n")
MyFile.close()

O arquivo ficaria assim:

1 9 2 . 1 6 8 . 2 . 3 2
1 9 2 . 1 6 8 . 2 . 6 3
1 9 2 . 1 6 8 . 2 . 8 6
1 9 2 . 1 6 8 . 2 . 9 0

Mas deixando como o exemplo inicial o arquivo ficaria assim:

192.168.2.32
192.168.2.63
192.168.2.86
192.168.2.90

Fico por aqui com o post, acho que já falei demais :P .

  • - a para anexar (append);
MyFile = open('/home/krix/list_ips.txt', 'a')
NewIPs = []
NewIPs.append(Text)
MyFile.write((''.join(NewIPs))+"\n")
MyFile.close()

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">