|
|
|
|
Python - Leitura e escrita
Início
1. Introdução
O Python dispõe de diversos mecanismos de para entrada e saída de dados.
Existem três canais específicos de acesso ao terminal (descritores) definidos no módulo"sys":
- sys.stdin: Entrada a partir do teclado;
- sys.stdout: Escrita no ecran;
- sys.stderr: Escrita de erros, em geral, também para o ecran;
Nota1: No caso de processos em batch, a entrada e saída irão para os ficheiros a eles associados.
Nota2: Estes descritores podem ser usados com as funções e métodos de escrita em ficheiros.
Alguns encontram-se como funções básicas outros exigem a uma importação, é o caso de módulo "io".
Início
2. Leitura e escrita de dados
A escrita de dados pode ser feita em ficheiros ou em "sys.output".
- print (*obj1, ..., *objN, sep=' ', end='\n', file=None, flush=False)
Imprime no ficheiro de descritor "file" ou em sys.output
se for "None", em modo "flush",
os objectos "obj?" separados por "sep" e termina a impressão com
"end"
- Escrita formatada usando print
É ainda possível formatar a escrita indicando-o previamente por um "f"
(ver: Formatted String Literals).
Exemplos:
print(f'O valor de pi com três casas decimais é {math.pi:.3f}.')
print(f'{"20 espaços":20} ==> {"11 espaços":11}__FIM__')
animal = "coelho"; patas = "quatro"; print(f'O {animal} tem {patas} patas.')
for x in range(1, 11): print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
print('{0} e {1} = {1} e {0}'.format('cães', 'gatos'))
print('{c} e {g} = {g} e {c}'.format(c='cães', g='gatos'))
x1 = 4; x2 = 8.1; x3 = x1 / x2; 'Valor: {:2.5} = {:2.3%}'.format(x3, x3)
a1='cão'; a2='gato'; print(f'Resultado {a1=} ; {a2=}')
Início
3. Abertura e fecho de ficheiros
Para abrir um ficheiro usa-se 'open':
f = open("__nome_do_ficheiro__", "__tipo_de_acesso__", encoding="utf-8");
em que "f" é o descritor do ficheiro, "__nome_do_ficheiro__" o nome do ficheiro que pode incluir o seu
endereço absoluto ou relativo, "__tipo_de_acesso__" é o modo como o ficheiro é acedido e o
"encoding" é conjunto de caracteres a utilizar.
Os modos como um ficheiro pode ser acedido ("__tipo_de_acesso__") são:
- 'r': Dá acesso de leitura ao ficheiro;
- 'w': Cria um ficheiro. No caso de já existir, apaga-o e cria um novo;
- 'a': Abre um ficheiro já existente e escreve no final dele;
- 'b': Indica que o ficheiro é de tipo binário;
- 't': Indica que o ficheiro é de tipo texto (default).
Para fechar um ficheiro usa-se o método "close":
f.close();
Início
4. Como executar um ficheiro dentro do python
Para ler e executar um ficheiro dentro do Python executar o seguinte comando:
exec(open("__ficheiro__").read());
Início
5. Leitura e escrita de ficheiros
Há diversos métodos ao dispor para fazer a leitura e a escrita em ficheiros.
Nos exemplos, utiliza-se Leitura
- 'readline()': Se se quer fazer a leitura linha a linha:
linha = f.readline();
- 'readlines()': Se se quer ler todas as linhas de uma vez.
Este método retorna uma lista em que cada elemento corresponde a uma linha:
linhas = f.readlines();
- 'read()': Retorna uma cadeia de caracteres com todos os bytes
do ficheiro a partir da posição do indicador de leitura:
bins = f.read();
Nota: Todas estas funções retornam uma string vazia no caso de posição do
indicador de leitura se encontrar no final do ficheiro.
Escrita
- 'writelines(dados)': Escreve a partir da posição do
indicador de leitura em que 'dados' é uma lista ou um tuplo:
f.writelines(dados);
- 'write(dados)': Escreve a partir da posição do
indicador de leitura a sequência de caracteres 'dados'.
f.write(dados);
Início
6. Módulo "io"
O módulo "io" (Ver: io)
disponibiliza um conjunto de funções e métodos para a leitura e escrita.
Há três categorias de ficheiros (não sentido lato): texto, binários e mistos (binários e texto) que são à partida
indicados quando da abertura do ficheiro.
O modo de acesso é feito através de fluxos de dados que devem ser previamente abertos.
Tal pode ser feito com a função "open" ou com "StringIO" para texto e com "BytesIO" para binário.
Exemplos:
f = open("myfile.txt", "r", encoding="utf-8")
f = io.StringIO("texto inicial")
f = open("myfile.jpg", "rb")
f = io.BytesIO(b"binário inicial: \x00\x01")
Exemplos de alguns métodos disponíveis:
- flush()
Flush the write buffers of the stream if applicable. This does nothing for read-only and non-blocking streams.
pos = f.flush()
- read(size=-1, /)
Lê "size" bytes a partir da posição actual, se for "size=-1" lê até ao final.
- readall()()
Lê todo o conteúdo do fluxo. Exemplo:
pos = f.readall()
- seek(offset, whence=os.SEEK_SET, /)
Posiciona o ponteiro no fluxo.
Em que "offset" é número de bytes usado de acordo com o ponto de partida da contagem
"whence" que pode tomar os valores "os.SEEK_SET" se a contagem
é feita a partir do início do fluxo,
"os.SEEK_SET" se é feita a partir do final do fluxo ou
"os.SEEK_CUR" se é feita a partir da posição actual.
Exemplo:
pos = f.seek(4, io.SEEK_CUR)
- tell:()
Retorna a posição actual no fluxo. Exemplo:
pos = f.tell()
- write(b, /)
Escreve no fluxo os bytes indicado em "b". Exemplo para um ficheiro binário:
f.write(bytes(b'abcdef\n'))
Início
|
|
|
|