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
.
- - a para anexar (append);
MyFile = open('/home/krix/list_ips.txt', 'a') NewIPs = [] NewIPs.append(Text) MyFile.write((''.join(NewIPs))+"\n") MyFile.close()




