Você está na página 1de 8

Introdução à programação em Python

Renato Hidaka Torres

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
.

Exemplo 1: Imprimindo uma string

In [66]:

print('Renato Hidaka')

Renato Hidaka

Exemplo 2: Imprimindo o conteúdo de três variáveis

In [67]:

A = 12
B = 'Renato'
C = 99

print(A, B, C)

12 Renato 99

Exemplo 3: Modificando o separador

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

print(A, B, C, sep=' separador ')

12 separador Renato separador 99

Exemplo 4: Modificando o finalizador da impressão

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

Exemplo 5: Modificando o separador e o finalizador da impressão

In [73]:
A = 12
B = 'Renato'
C = 99

print(A, B, C, sep=';', end='.')

12;Renato;99.

In [74]:

A = 12
B = 'Renato'
C = 99

print(A, B, C, sep='-------', end='!!!!!')

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.

Personalizando a saída com string literal

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

saida = f'Nome: {nome}, E-mail: {email} e Código: {cod}'

print(saida)

Nome: Renato Hidaka, E-mail: renatohidaka@gmail.com e Código: 9392

In [76]:
nome = 'Renato Hidaka'
email = 'renatohidaka@gmail.com'
cod = 9392

saida = f'Nome: {nome}\nE-mail: {email}\nCódigo: {cod}'

print(saida)

Nome: Renato Hidaka


E-mail: renatohidaka@gmail.com
Código: 9392

Formatando casas decimais na string literal

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

Formatando o espaçamento das expressões na string literal

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

saida = f'{"Nome:":10} {nome}\n{"E-mail:":10} {email}\n{"Código:":10} {cod}'

print(saida)

Nome: Renato Hidaka


E-mail: renatohidaka@gmail.com
Código: 9392

In [82]:
nome = 'Renato Hidaka'
email = 'renatohidaka@gmail.com'
cod = 9392

saida = f'{"Nome:":10} {"=>":10} {nome}\n{"E-mail:":10} {"=>":10} {email}\n{"Código:":10} {"=>":10} {cod}'

print(saida)

Nome: => Renato Hidaka


E-mail: => renatohidaka@gmail.com
Código: => 9392

Melhorando a leitura do código com Multi Line String

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]:

nome = 'Renato Hidaka'


email = 'renatohidaka@gmail.com'
cod = 9392

saida = f'''
{"Nome:":10} {nome}
{"E-mail:":10} {email}
{"Código:":10} {cod}'''

print(saida)

Nome: Renato Hidaka


E-mail: renatohidaka@gmail.com
Código: 9392

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.

Exemplo 6: Lendo um nome:

In [84]:
nome = input('Digite o seu nome: ')
print('Olá', nome)

Digite o seu nome: 12


Olá 12

Exemplo 7: Lendo um número inteiro:

In [89]:
valor = int(input('Digite um número inteiro: '))
print(valor)

Digite um número inteiro: 12


12

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.

Exemplo 8: Lendo um número fracionário:

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.

Leitura de arquivo de texto

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:

Exemplo 9: Leitura de um arquivo de texto:

In [87]:

with open('arquivo.txt', 'r', encoding="utf-8") as f:


conteudo = f.read()

print(conteudo)

Renato Hidaka Torres


renatohidaka@gmail.com
93842

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.

Exemplo 10: Leitura de uma linha do arquivo de texto:

In [92]:

with open('arquivo.txt', encoding="utf-8") as f:


linha1 = f.readline()
print(linha1)
linha2 = f.readline()
print(linha2)

Renato Hidaka Torres

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.

Exemplo 11: Leitura de todas as linhas arquivo de texto:

In [99]:

with open('arquivo.txt', encoding="utf-8") as f:


for linha in f:
print(linha, end='')

Renato Hidaka Torres


renatohidaka@gmail.com
93842

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.

Exemplo 12: Leitura de arquivo inexistente:


In [93]:
with open('arquivoX.txt', encoding="utf-8") as f:
for linha in f:
print(linha, end='')

---------------------------------------------------------------------------
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='')

FileNotFoundError: [Errno 2] No such file or directory: 'arquivoX.txt'

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:

Exemplo 13: Escrevendo com o modo w:

In [105]:
with open('arquivo.txt', 'r', encoding="utf-8") as f:
conteudo = f.read()
print(conteudo)

Renato Hidaka Torres


renatohidaka@gmail.com
93842

In [106]:

with open('arquivo.txt', 'w', encoding="utf-8") as f:


f.write('Júlia Torres')
f.write('\n')
f.write('julia@email.com')

with open('arquivo.txt', 'r', encoding="utf-8") as f:


conteudo = f.read()
print(conteudo)

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.

Exemplo 14: Escrevendo com o modo a:

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]:

with open('arquivo.txt', 'a', encoding="utf-8") as f:


f.write('\n')
f.write('9439')

with open('arquivo.txt', 'r', encoding="utf-8") as f:


conteudo = f.read()
print(conteudo)

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.

Exemplo 15: Escrevendo uma multi line string:

In [110]:
conteudo = '''
Renato Hidaka Torres
renatohidaka@gmail.com
95493
'''

with open('arquivo.txt', 'w', encoding="utf-8") as f:


f.write(conteudo)

with open('arquivo.txt', 'r', encoding="utf-8") as f:


conteudo = f.read()
print(conteudo)

Renato Hidaka Torres


renatohidaka@gmail.com
95493

Exercício
In [ ]:

Você também pode gostar