IST - Física HowTo - Informática 11:01
2025-12-22
  Programação
 
     Python
 
        Módulos
 
        Tipos e operações
 
        Classes
 
        Strings
 
        Listas
 
        Tuples
 
        Dictionaries
 
        Ciclos e condições
 
        Instr. compostas
 
        Leitura e escrita
 
        Números aleatórios
 

Python - Leitura e escrita

Sumário
1. Introdução
2. Leitura e escrita de dados
3. Abertura e fecho de ficheiros
4. Como executar um ficheiro dentro do python
5. Leitura e escrita de ficheiros
6. Módulo "io"
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, /)
      "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