Escolar Documentos
Profissional Documentos
Cultura Documentos
Entrada e Saída
Objetivo
Neste capítulo você irá estudar as principais formas de entrada e saída de dados utilizadas na linguagem Python. Obviamente, ao
programar um sistema, a interface de entrada e saída de dados é trabalhada para operar de forma amigável em ambientes web e
mobile, por exemplo. Entretanto, esse livro não tem como objetivo aprofundar esse tipo amigável de entrada e saída de dados.
Aqui, nós iremos trabalhar com as entradas e saídas básicas em modo texto. Ao final deste capítulo, você terá várias questões
para exercitar o conteúdo.
Saída de dados
Na linguagem Python, utilizamos a função print para imprimir as informações na saída padrão do computador (monitor). Essa
função pode receber múltiplos argumentos separados por vírgula. Cada argumento é convertido para string antes de ser
imprimido na tela. A função print possui dois parâmetros nomeados que definem a forma de separação das informações
impressas e a formatação da finalização da impressão. Esse parâmetros nomeados são, respectivamente, o sep e o end.
Por padrão, o parâmetro nomeado sep é definido como espaço em branco. Ou seja, se a função print imprimir mais de uma
informação, então elas estarão separadas por um espaço em branco. Em relação ao parâmetro nomeado end, por padrão, é
definido como quebra de linha (\n). Isso significa que após a impressão, o print realiza uma quebra de linha. Vejamos alguns
exemplos de utilização da função print
.
In [66]:
print('Renato Hidaka')
Renato Hidaka
In [67]:
A = 12
B = 'Renato'
C = 99
print(A, B, C)
12 Renato 99
In [68]:
A = 12
B = 'Renato'
C = 99
print(A, B, C, sep='-')
12-Renato-99
In [69]:
A = 12
B = 'Renato'
C = 99
print(A, B, C, sep='\n')
12
Renato
99
In [70]:
A = 12
B = 'Renato'
C = 99
In [71]:
A = 12
B = 'Renato'
C = 99
print(A, B, C, end='.')
12 Renato 99.
In [72]:
A = 12
B = 'Renato'
C = 99
print(A, B, C, end='\n\nfim')
12 Renato 99
fim
In [73]:
A = 12
B = 'Renato'
C = 99
12;Renato;99.
In [74]:
A = 12
B = 'Renato'
C = 99
12-------Renato-------99!!!!!
Como você deve ter notado, toda vez que você precisar redefinir o separador ou o finalizar da impressão, os valores dos
parâmetros nomeados devem ser os últimos argumentos passados para a função print.
Uma string literal é uma string especial que tem a letra f ou F precedendo a abertura das aspas. Dentro das aspas, utilizando as
chaves, pode-se escrever uma expressão ou exibir o conteúdo de uma variável. Vejamos um exemplo:
In [75]:
nome = 'Renato Hidaka'
email = 'renatohidaka@gmail.com'
cod = 9392
print(saida)
In [76]:
nome = 'Renato Hidaka'
email = 'renatohidaka@gmail.com'
cod = 9392
print(saida)
Se você estiver definindo um valor com ponto flutuante em uma string literal e quiser especificar o número de casas decimais,
você pode fazer isso da seguinte forma:
In [77]:
valor = 12.5697
saida = f'R$ {valor:.2f}'
print(saida)
R$ 12.57
In [78]:
valor = 12.5697
saida = f'R$ {valor:.3f}'
print(saida)
R$ 12.570
Como você deve ter notado, a definição do número de casas decimais ocorre com a especificação do padrão:.Nf, onde N
corresponde ao número de casas decimais desejadas.
Sobre essa questão da definição do número de casas decimais, você também pode fazer isso, utilizando a função str. Veja:
In [79]:
valor = 12.5697
valor = str('%.2f'%valor)
print('R$', valor)
R$ 12.57
In [80]:
valor = 12.5697
valor = str('%.3f'%valor)
print('R$', valor)
R$ 12.570
Ao utilizar uma expressão na string literal, podemos definir o número mínimo N de caracteres que essa expressão deve ter. Para
isso, basta especificar o valor de N, após os dois pontos, da seguinte forma:
In [81]:
nome = 'Renato Hidaka'
email = 'renatohidaka@gmail.com'
cod = 9392
print(saida)
In [82]:
nome = 'Renato Hidaka'
email = 'renatohidaka@gmail.com'
cod = 9392
print(saida)
Quando utilizamos uma string literal com muitos detalhes de formatação, pode ser que a leitura desse código fique difícil. Na
tentativa de melhorar a leitura do código, uma alternativa que você pode utilizar é a string de múltiplas linhas. Na linguagem
Python, uma string de múltiplas linhas é definida por três aspas abrindo e fechando. Ao utilizar uma string de múltiplas linhas,
saiba que todo espaço e quebra de linha será refletido na impressão. Vamos recodificar a exemplo anterior e observar como a
leitura do código melhora.
In [83]:
saida = f'''
{"Nome:":10} {nome}
{"E-mail:":10} {email}
{"Código:":10} {cod}'''
print(saida)
Entrada de dados
Na linguagem Python, utilizamos a função input para ler as informações da entrada padrão do computador (teclado). É
importante saber que toda informação lida pela função input é armazaneda como string. Por tanto, caso você queria que a
inforamção lida seja armazenada com outro tipo, é necessário utilizar a função apropriada para a conversão de tipo. Outra
observação importante da função input é que ela admite uma string como argumento. O valor passado como argumento dessa
função é exibido no monitor para o usuário. Normalmente, essa string funciona como uma mensagem de auxílio para o usuário.
Vejamos alguns exemplos de utilização da função input.
In [84]:
nome = input('Digite o seu nome: ')
print('Olá', nome)
In [89]:
valor = int(input('Digite um número inteiro: '))
print(valor)
Nesse exemplo, observe que estamos utilizando a função int para converter para número inteiro o valor lido pelo input. Caso o
usuário digite alguma informação que não seja um número inteiro, o programa gera um erro em tempo de execução do tipo
ValueError. No capítulo de controle de fluxo, você aprenderá como resolver esse problema.
In [ ]:
valor = float(input('Digite um número fracionário: '))
print(valor)
Nesse exemplo, estamos utilizando a função float para converter para número fracionário o valor lido pelo input. Na linguagem
Python, os valores fracionários são definidos por ponto e não por vírgula. Caso o usuário digite alguma informação que não seja
um número fracionário ou digite um número fracionário com vírgula, o programa também gera um erro em tempo de execução do
tipo ValueError.
Nos próximos capítulos, depois que estudarmos a função map e List Comprehensions, nós vamos explorar outras possibilidades
de leituras com o comando input.
Outro tipo de entrada de dados que vamos estudar refere-se a leitura de arquivos. Na linguagem Python, existem várias formas
de ler arquivos. Nós vamos estudar a forma que utiliza a função open combinada com o comando with.
Para ler um arquivo com a função open, normalmente, passamos três argumentos. O primeiro argumento refere-se ao caminho
do arquivo que será lido. O segundo argumento refere-se ao modo de operação sobre o arquivo. Por fim, o terceiro argumento
que diz respeito à um parâmetro nomeado, refere-se ao tipo de codificação do arquivo.
Sobre o caminho do arquivo, se este estiver no mesmo diretório do código fonte, basta passar o nome do arquivo que será lido.
Caso contrário, é necessário passar o caminho inteiro. Em relação ao modo de operação, o caractere r indica que o arquivo
sofrerá uma operação de leitura. O modo de operação de leitura é o modo padrão da função open. Portanto, quando for realizar a
leitura de um arquivo, se você quiser, pode omitir esse argumento. Em relação ao parâmetro nomeado enconding, passamos o
argumento utf-8 que normalmente é utilizado para arquivos de texto.
Ao utilizar a função open para manipular um arquivo, utilizamos o comando with para gerenciar essa manipulação. No escopo do
comando with, temos o controle da manipulação do arquivo. Após a finalização do escopo do comandowith, temos a garantia de
que o canal de comunicação com o arquivo é encerrado. No cabeçalho do comando with, devemos definir o arquivo que será lido
pela função open, bem como a variável de referência que irá armazenar esse arquivo. Essa variável é definida pelo comandoas.
Vejamos alguns exemplos de leitura de um arquivo:
In [87]:
print(conteudo)
Nesse exemplo, estamos lendo um arquivo de nomearquivo.txt que está no mesmo diretório do código fonte. Definimos a
variável f para referenciar o arquivo. A partir dessa variável, dentro do escopo do comandowith, utilizamos a função read para ler
todo o conteúdo do arquivo. Após a finalização do escopo do comando with, imprimimos o conteúdo do arquivo que está
armazenado na variável conteudo.
In [92]:
renatohidaka@gmail.com
Para ler somente uma linha do arquivo, podemos utilizar a função readline. Cada vez que essa função é chamada, lemos a
próxima linha do arquivo. Se a função readline é chamada N vezes tal que N seja maior do que o número de linhas existente no
arquivo, então, para as chamadas excedentes, a função retorna uma string vazia.
In [99]:
Nesse exemplo, sabendo que a variável f está armazenando todo o conteúdo do arquivo, podemos utilizar o laçofor para iterar
as linhas do arquivo.
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-93-ad1be3ce163a> in <module>
----> 1 with open('arquivoX.txt', encoding="utf-8") as f:
2 for linha in f:
3 print(linha, end='')
Caso você informe um arquivo inexistente ou um arquivo com o caminho incorreto, você receberá um erro em tempo de
execução do tipo FileNotFoundError.
Escrita de arquivo
Para escrever em um arquivo, a única coisa que precisamos mudar no cabeçalho do comandowith é o modo de operação.
Como você já sabe, o modo de operação deve ser passado como segundo argumento da função open. No caso da escrita de
arquivo, temos a opção do modo w e a. Se o modo w for usado, então, antes de qualquer escrita, o arquivo é limpado. Já o modo
a mantém o conteúdo existente, acrescentando os novos conteúdos no final do arquivo. Vejamos alguns exemplos de escrita:
In [105]:
with open('arquivo.txt', 'r', encoding="utf-8") as f:
conteudo = f.read()
print(conteudo)
In [106]:
Júlia Torres
julia@email.com
Nesse exemplo, primeiramente realizamos a leitura do arquivo para mostrar o conteúdo existente. Em seguida, realizamos a
escrita com o modo de operação w e realizamos uma nova leitura para mostrar que o conteúdo antigo foi perdido. Na operação
de escrita, cada chamada da função write realiza uma escrita no arquivo. Para realizar uma escrita em uma nova linha do
arquivo, você precisa escrever o \n.
In [107]:
with open('arquivo.txt', 'r', encoding="utf-8") as f:
conteudo = f.read()
print(conteudo)
Júlia Torres
julia@email.com
In [108]:
Júlia Torres
julia@email.com
9439
Nesse exemplo, utilizamos a mesma estratégia. Primeiramente realizamos a leitura do arquivo para mostrar o conteúdo existente.
Em seguida, realizamos a escrita com o modo de operação a e realizamos uma nova leitura para mostrar que o conteúdo antigo
foi mantido.
In [110]:
conteudo = '''
Renato Hidaka Torres
renatohidaka@gmail.com
95493
'''
Exercício
In [ ]: