post

Python pt-br:Entrada e Saida

Contents

Introdução

Haverá situações em que seu programa deverá interagir com o usuário. Por exemplo, você poderia desejar obter alguma entrada do usuário e então imprimir algo. Nós podemos fazer isso usando as funções input() e print().

Para a saída, nós também podemos usar vários métodos da classe str (string). Por exemplo, você pode usar o método rjust para tornar uma string justificada a direita em uma largura especificada. Veja help(str).

Outro tipo comum de entrada/saída é o uso de arquivos. A habilidade de criar, ler e escrever arquivos é essencial para muitos programas e nós exploraremos este aspecto neste capítulo.

Entrada do usuário

#!/usr/bin/python
# user_input.py

def reverse(texto):
    return texto[::-1]

def is_palindrome(texto):
    return texto == reverse(texto)

algo = input('Entre com o texto: ')
if (is_palindrome(algo)):
    print("Sim, é um palíndromo")
else:
    print("Não, não é um palíndromo")

Saída:

   $ python user_input.py
   Entre com o texto: senhor
   Não, não é um palíndromo

   $ python user_input.py
   Entre com o texto: ana
   Sim, é um palíndromo

   $ python user_input.py
   Entre com o texto: somavamos
   Sim, é um palíndromo

Como funciona:

Nós usamos um ‘slicing’ para inverter o texto. Nós já vimos como podemos fazê-lo ‘slices’ de sequências usando o código seq[a:b] iniciando da posição a para a posição b. Nós também podemos fornecer um terceiro argumento que determina os passos pelos quais o ‘slicing’ é feito. O passo padrão é 1, pois assim ele retorna uma parte contínua do texto. Dando um passo negativo, i.e. -1 o texto será retornado de forma invertida.

A função input() recebe uma string como argumento e a mostra para o usuário. Então ela espera que o usuário digite algo e pressione a tecla de retorno (Enter). Feito isso, a função input() irá retornar o texto.

Nós pegamos este texto e o invertemos. Se o texto original e o invertido forem iguais, então o texto é um palíndromo.

Lição de casa:

Verificar se um texto é um palíndromo deveria ignorar pontuação, espaços e caixas altas e baixas. Por exemplo, “Socorram-me, subi no ônibus em Marrocos!” também é um palíndromo, mas nosso atual programa não diz isso. Você pode modificar o programa para reconhecer este palíndromo?

Arquivos

Você pode abrir e usar arquivos para leitura ou gravação criando um objeto da classe file e usando seus métodos read, readline ou write para ler ou escrever no arquivo. A possibilidade de ler ou escrever no arquivo depende do modo que você especificou em sua abertura. Quando você acabar de usar o arquivo, você pode chamar o método close() para dizer para o Python que nós terminamos de usar o arquivo.

Exemplo:

#!/usr/bin/python
# Filename: usando_arquivo.py

poema = '''
Programar é divertido
Quando o trabalho está pronto
se você quer tornar seu trabalho divertido:
    use Python!
'''

f = open('poema.txt', 'w') # abrir para escrever ('w'riting)
f.write(poema) # escreve o texto no arquivo
f.close() # fecha o arquivo

f = open('poema.txt') # se nenhum modo é especificado, o modo leitura ('r'ead) é aberto por padrão
while True:
    linha = f.readline()
    if len(linha) == 0: # Tamanho 0 indica EOF (fim do arquivo - End Of File)
        break
    print(linha, end='')
f.close() # fecha o arquivo

Saída:

   $ python usando_arquivo.py
   Programar é divertido
   Quando o trabalho está pronto
   se você quer tornar seu trabalho divertido:
           use Python!

Como funciona:

Inicialmente, abrimos um arquivo usando a função embutida open e especificando o nome do arquivo e o modo no qual queremos abri-lo. Os modos podem ser de leitura ('r'), gravação ('w') ou adicionar ('a'). Nós também podemos trabalhar com um arquivo de texto ('t') ou um arquivo binário ('b'). Na verdade existem muito mais módulos disponíveis, digitar help(open) dará a você mais detalhes sobre eles. Por padrão, open() consideradas o arquivo como um ‘t’exto e o abre no modo leitura (‘r’ead).

Em nosso exemplo, nós primeiro abrimos o arquivo em modo texto para gravação, então usamos o método write do objeto arquivo para escrever o texto e, finalmente, fechamos o arquivo com o método close.

Em seguida, nós abrimos o mesmo arquivo novamente para leitura. Nós não especificamos o modo pois o modo padrão é ‘arquivo texto para leitura’. Nós lemos cada linha usando o método readline em um loop. Este método retorna uma linha completa, incluindo o carácter de nova linha no final. Quando uma string vazia é retornada, significa que nós atingimos o fim do arquivo e, então, ‘interrompemos’ (break) o loop.

Por padrão, a função print() imprime o texto com uma nova linha na tela. Nós evitamos a nova linha especificando end='' pois a linha que é lida do arquivo já termina com um carácter de nova linha. Finalmente, nós fechamos o arquivo.

Agora, verifique o conteúdo do arquivo poema.txt para se certificar de que o programa escreveu e leu o arquivo.

Pickle

Python fornece um módulo padrão chamado pickle, que permite que você armazene qualquer objeto de Python em um arquivo e então o pegue novamente mais tarde. Isto é chamado de armazenar o objeto permanentemente.

Exemplo:

#!/usr/bin/python
# Filename: pickling.py

import pickle

# o nome do arquivo onde armazenaremos o objeto
arquivo_listadecompras = 'listadecompras.data'
# a lista de coisas a comprar 
listadecompras = ['maçã', 'manga', 'cenoura']

# Escrevendo no arquivo
f = open(arquivo_listadecompras, 'wb')
pickle.dump(listadecompras, f) # descarrega o objeto em um arquivo
f.close()

del listadecompras # destrói a variável listadecompras

# Lê o que foi armazenado
f = open(arquivo_listadecompras, 'rb')
lista_armazenada = pickle.load(f) # carrega o objeto do arquivo
print(lista_armazenada)

Saída:

   $ python pickling.py
   ['maçã', 'manga', 'cenoura']

Como funciona:

Para armazenar um objeto em um arquivo, nós devemos inicialmente abrir o arquivo com o módulo open em modo de gravação (‘w’rite) e ‘b’inário, para então chamar a função dump do módulo pickle. Este processo é chamado pickling.

A seguir, nós recuperamos o objeto, usando a função load do módulo pickle que retorna o objeto. Este processo é chamado unpickling.

Sumário

Nós discutimos vários tipos de entrada/saída e também o manuseio de arquivos usando o módulo pickle.

A seguir, nós exploraremos o conceito de exceções.


Advertisements