·
Ciência da Computação ·
Linguagens de Programação
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
2
Orientações Éticas para Trabalhos Práticos em Programação
Linguagens de Programação
MACKENZIE
14
Notas de Aula: Teoria da Computação - Reduções
Linguagens de Programação
MACKENZIE
7
Análise da Complexidade de Espaço em Algoritmos
Linguagens de Programação
MACKENZIE
1
Prova sobre Programação Orientada a Objetos
Linguagens de Programação
FEI
1
Anotações sobre Design de Software e Atividades de Desenvolvimento
Linguagens de Programação
DESCOMPLICA
17
Análise de Algoritmos e Teoria da Computabilidade
Linguagens de Programação
UNINASSAU
1
Cálculo da Média Aritmética entre Dois Maiores Números em Python
Linguagens de Programação
UNIFTC
3
Documentação e Programação do Sistema de Compra de Ingressos do Grupo Mariano Pinheiro
Linguagens de Programação
UMG
1
Desenvolvimento de Máquina Virtual para Emulação de CPU
Linguagens de Programação
UVA
1
Comandos e Consultas em SQL: A Importância do DQL
Linguagens de Programação
UNIANCHIETA
Texto de pré-visualização
FACULDADE DE COMPUTAÇÃO E INFORMÁTICA CIÊNCIA DA COMPUTAÇÃO E SISTEMAS DE INFORMAÇÃO Linguagem de Programação I Aula 10: Arquivos – Gravação Nossos objetivos nesta aula são: Aprender a efetuar em Python as operações fundamentais para realizar a escrita de dados em um arquivo texto. Capturar e tratar exceções relacionadas às operações realizadas em arquivos texto. A referência para esta aula está no Capítulo 8 do livro: DIERBACH, C. Introduction to Computer Science Using Python: A Computational Problem Solving Focus. 1st Edition , New York: Wiley , 2012. Escrita de dados em um arquivo texto Para escrever dados em um arquivo texto é necessário primeiramente abrir o arquivo para leitura . Para isso, utiliza-se a função open conforme o exemplo abaixo: arquivo = open( 'nome_arquivo.txt', 'w') Este exemplo realiza a abertura de um arquivo com o nome nome_arquivo.txt , que é passado como o primeiro argumento na chamada da função. O segundo argumento (a letra w, que é a inicial de write ) indica que o arquivo está sendo aberto para escrita. Como já vimos anteriormente, pode-se especificar o caminho completo ou o caminho relativo até o arquivo se ele não estiver no mesmo diretório onde o programa está sendo executado. Quando a abertura do arquivo é realizada com sucesso, a função retorna um objeto do tipo arquivo. Para escrever dados podemos utilizar o método write do arquivo, chamando-o quantas vezes forem necessárias. arquivo.write ('Americana x Portuguesa') Ao contrário da função print com a qual estamos acostumados, o método write não adiciona automaticamente uma nova linha ao final. Desta forma, se quisermos que após a escrita dos dados seja acrescentada uma nova linha, é necessário adicionar o caractere de controle ''. arquivo.write ('Bragantino x Flamengo\n') Finalmente, após o programar terminar de escrever os dados desejados no arquivo, deve ser realizada a operação de fechamento do arquivo utilizando o método close . arquivo.close () A execução do fechamento é importante para garantir que todos os dados sejam efetivamente gravados no arquivo. Isto é necessário porque, ao escrever em um arquivo, os dados são primeiramente armazenados em uma área temporária da memória chamada de buffer , e eles são efetivamente gravados no arquivo quando o buffer fica cheio. O método close força a escrita no arquivo dos dados do buffer que ainda não foram gravados. EXEMPLO 1 Vamos desenvolver um programa que solicite o número de times que irão participar do campeonato e, a seguir, solicite o nome de cada time. Os dados dos times deverão ser gravados em um arquivo chamado times_campeonato.txt , sendo que a informação de cada time deverá ficar em uma linha separada, no formato: # Nome do time:ESTADO num_times = int ( input ( ' Número de times: ' )) meu_arquivo = open ( 'times_campeonato.txt' , 'w' ) for cont in range ( num_times ): nome = input ( 'Nome do time número ' + str (cont + 1 ) + ': ' ) estado = input ( 'Estado do time número ' + str (cont + 1 ) + ': ' ) meu_arquivo.write ( nome + ':' + estado + ' \n ' ) meu_arquivo.close () Resultado da execução: Número de times: 5 Nome do time número 1: Santos Estado do time número 1: SP Nome do time número 2: Guarani Estado do time número 2: SP Nome do time número 3: Vasco Estado do time número 3: RJ Nome do time número 4: Coritiba Estado do time número 4: PR Nome do time número 5: Palmeiras Estado do time número 5: SP Se abrirmos o arquivo times_campeonato.txt em um editor de textos, veremos os dados dos times que acabamos de entrar. Bloco de notas com times LEITURA DO ARQUIVO UTILIZANDO UM LAÇO FOR Na aula passada aprendemos a ler os dados de um arquivo utilizando o método readline . No entanto, se desejamos ler sequencialmente todas as linhas do arquivo até o final, podemos também utilizar um laço for . EXEMPLO 2 O programa abaixo lê as linhas do arquivo times_campeonato.txt utilizando um laço for e imprime os nomes dos times na tela. times_arquivo = open ( 'times_campeonato.txt' , 'r' ) for linha in times_arquivo : print ( 'Nome do time:' , linha.rstrip ()) times_arquivo.close () Resultado da execução: Nome do time: Santos:SP Nome do time: Guarani:SP Nome do time: Vasco:RJ Nome do time: Coritiba:PR Nome do time: Palmeiras:SP Programas que usam arquivos de entrada e saída É comum termos programas que leem os dados de um arquivo (chamado de arquivo de entrada), realizam algum processamento e escrevem os resultados em um outro arquivo (chamado de arquivo de saída). EXEMPLO 3 Vamos desenvolver um programa que tem como arquivo de entrada o arquivo times_campeonato.txt (que foi criado no Exemplo 1) e que gera como saída o arquivo times_sp.txt , que deve contem somente os nomes dos times do estado de São Paulo. times_arquivo = open ( 'times_campeonato.txt' , 'r' ) times_sp_arquivo = open ( 'times_sp.txt' , 'w' ) for linha in times_arquivo : registro_time = linha.rstrip () info_time = registro_time.split ( ':' ) nome = info_time [ 0 ] estado = info_time [ 1 ] if estado == 'SP' : times_sp_arquivo.write ( nome + ' \n ' ) times_arquivo.close () times_sp_arquivo.close () Se abrirmos o arquivo times_sp.txt em um editor de textos, veremos somente os nomes dos times de SP. Bloco de notas com times de SP EXERCÍCIO TUTORADO 1 Desenvolva um programa que leia os times cadastrados no arquivo times_campeonato.txt (o mesmo definido no Exemplo 1) e utilize estes times para montar um campeonato do tipo todos contra todos em turno único, onde cada um dos competidores enfrenta todos os demais apenas uma vez. Para isso, seu programa deverá: Ler os times que estão no arquivo times_campeonato.txt . Gerar os jogos do campeonato. Salvar as informações dos jogos em um arquivo chamado jogos_turno_unico.txt , sendo que cada jogo deverá ser salvo em uma linha separada no formato: TimeA:TimeB Por exemplo, suponha que há somente 3 times cadastrados no arquivo times_campeonato.txt : Guarani, Portuguesa e Palmeiras. Neste caso, o seu programa deveria apresentar como resultado o arquivo jogos_turno_unico.txt com o seguinte conteúdo: Guarani:Portuguesa Guarani:Palmeiras Portuguesa:Palmeiras Exceções Durante a execução de programas Python podem ocorrer erros que causam a interrupção abrupta da execução. Estes erros são chamados de exceções . Por exemplo, se no programa do exemplo 2 (que lê o conteúdo do arquivo times_campeonato.txt e imprime na tela) tivéssemos errado o nome do arquivo, estaríamos tentando abrir um arquivo que não existe. times_arquivo = open ( 'times_campo.txt' , 'r' ) for linha in times_arquivo : print ( 'Nome do time:' , linha.rstrip ()) times_arquivo.close () Resultado da execução: --------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) <ipython-input-14-db23a71b0a44> in <module >( ) ----> 1 times_arquivo = open( 'times_campo.txt', 'r') 2 for linha in times_arquivo : 3 print('Nome do time:', linha.rstrip ()) 4 times_arquivo.close () FileNotFoundError : [ Errno 2] No such file or directory: 'times_campo.txt' Esta exceção causa uma interrupção abrupta na execução da linha 1 do programa: times_arquivo = open( 'times_campo.txt', 'r') A exceção que foi lançada neste exemplo é identificada pelo nome FileNotFoundError . Para evitar a interrupção abrupta da execução do programa, as exceções podem ser capturadas e tratadas . Para isso, utiliza-se a estrutura try-except . Tratamento de exceções utilizando try-except Dentro do bloco try coloca-se a sentença que podem gerar a exceção e as sentenças que dependem do sucesso da execução desta primeira sentença. No nosso exemplo anterior, colocaríamos dentro do bloco try praticamente todo o programa inicial: nome_arquivo = input( 'Nome do arquivo com os dados do time: ') try: times_arquivo = open( nome_arquivo , 'r') for linha in times_arquivo : print('Nome do time:', linha.rstrip ()) times_arquivo.close () Para tratar a exceção, identificamos a exceção que será tratada (no nosso caso FileNotFoundError ) logo após a palavra except e definimos um bloco com o que deverá ser executado caso a exceção ocorra. except FileNotFoundError : print( 'O arquivo ', nome_arquivo , ' não foi encontrado ') EXEMPLO 4 O programa abaixo trata a exceção FileNotFoundError de forma a informar de uma "maneira civilizada" que o arquivo não foi encontrado. nome_arquivo = input ( 'Nome do arquivo com os dados do time: ' ) try : times_arquivo = open ( nome_arquivo , 'r' ) print ( ' Arquivo ' , nome_arquivo , ' encontrado !' ) for linha in times_arquivo : print ( 'Nome do time:' , linha.rstrip ()) times_arquivo.close () except FileNotFoundError : print ( 'O arquivo ' , nome_arquivo , ' não foi encontrado ' ) Resultado da execução> Nome do arquivo com os dados do time: times_campo.txt O arquivo times_campo.txt não foi encontrado Note que quando a exceção ocorre na execução da função open , o fluxo da execução do programa é desviado para o bloco except . EXERCÍCIO TUTORADO 2 O programa abaixo solicita que você digite a sua idade e apresenta qual será a sua idade daqui a um ano. idade = int ( input ( ' Sua idade : ' )) proxima = idade + 1 print ( ' Ano que vem você terá ' , proxima , ' anos ' ) Resultado da execução: Sua idade : trinta --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-bc6d2eb74af8> in <module>() ----> 1 idade = int(input(' Sua idade : ')) 2 proxima = idade + 1 3 print(' Ano que vem você terá ', proxima , ' anos ') ValueError : invalid literal for int() with base 10: ' trinta ' No entanto, como podemos ver acima, se o usuário entrar letras e não números, ocorre uma exceção chamada ValueError na execução da linha idade = int( input(' Sua idade : ')) Faça o tratamento desta exceção, apresentando a mensagem "Entre somente dígitos!" quando esta exceção ocorrer. Exercícios Os jogos do campeonato estão registrados no arquivo jogos_turno_unico.txt , onde cada jogo é definido por uma linha do arquivo no formato: TimeA:TimeB Você precisa registrar os resultados dos jogos do campeonato. Para isso, desenvolva um programa que: Leia os jogos cadastrados no arquivo jogos_turno_unico.txt . Em cada jogo, solicite que o usuário informe o número de gols marcados por cada time no jogo. Você pode, por exemplo, estabelecer a seguinte sequência de interação: Jogo: Guarani x Santos Número de gols marcados pelo Guarani: ____ Número de gols marcados pelo Santos: ____ Grave no arquivo resultados_jogos_turno_unico.txt um resultado por linha no formato: TimeA:Gols_TimeA:TimeB:Gols_TimeB Exemplo de conteúdo do arquivo resultados_jogos_turno_unico.txt após a execução do programa: Corinthians:5:Palmeiras:1 São Paulo:1:Corinthians:6 Palmeiras:3:São Paulo:3 Palmeiras:4:Guarani:5 Guarani:1:Corinthians:2 São Paulo:3:Guarani:4 No exercício anterior, o programa sempre busca os jogos no arquivo com o nome jogos_turno_unico.txt . Altere o programa para que no início da execução ele solicite o nome do arquivo com os jogos. Caso ocorra a exceção FileNotFoundException , seu programa deverá apresentar a mensagem "Arquivo não encontrado!" e solicitar novamente o nome do arquivo até que seja fornecido o nome de um arquivo existente. O programa do exercício anterior solicita que o usuário entre o número de gols de cada time, esperando que o usuário entre apenas dígitos. Caso o usuário não entre somente dígitos (por exemplo, entre letras ou símbolos), ocorrerá a exceção ValueError . Modifique o programa para que trate esta exceção e, caso ela ocorra, volte a solicitar que o usuário entre o número de gols. Isto deve se repetir até que ele forneça uma entrada válida. Exercícios extras Desenvolva um programa que gere os jogos do campeonato utilizando o sistema de todos contra todos com turno e returno (ou seja, cada competidor enfrenta todos os demais duas vezes, alternando os campos onde a partida é realizada). Para isso, seu programa deverá: Ler os times que estão no arquivo times_campeonato.txt (arquivo especificado no Exemplo 1 desta aula). Gerar os jogos do campeonato. Salvar as informações dos jogos em um arquivo chamado jogos_turno_returno.txt , sendo que cada jogo deverá ser salvo em uma linha separada no formato: TimeA:TimeB:Campo Exemplo de conteúdo do arquivo jogos_turno_returno.txt : Corinthians:Santos:campo do Corinthians Corinthians:Guarani:campo do Corinthians Santos:Corinthians:campo do Santos Santos:Guarani:campo do Santos Guarani:Corinthians:campo do Guarani Guarani:Santos:campo do Guarani Seu superior tem um arquivo texto com o nome salarios.csv que possui os salários de todos os funcionários da empresa. Cada linha deste arquivo contém as informações de um funcionário, no formato: número_funcional:salário Exemplo de conteúdo do arquivo: 1150072:5001.99 1147778:2321.45 1194720:1345.01 1009999:6432.55 Seu superior precisa que você desenvolva um programa em Python que leia o conteúdo deste arquivo e gere um novo arquivo chamado salarios_5000.csv , somente com as informações dos funcionários que ganham um salário maior ou igual a R$ 5000,00. O formato de cada linha do arquivo deve ser igual ao do arquivo original. Desenvolva o programa solicitado. Desenvolva um programa que conte o número de vezes que cada letra do alfabeto aparece no texto do arquivo letra.txt . Ao final da execução, o resultado da contagem deverá ser escrito no arquivo resultado.txt , onde cada linha terá o formato: letra:contagem O programa deverá somar a contagem de ocorrências das minúsculas e maiúsculas de cada letra. Desta forma, a contagem que o arquivo apresenta para a letra A, por exemplo, deverá incluir tanto as ocorrências da minúscula (a) quanto da maiúscula (A). Faça um teste executando o seu programa com o seguinte conteúdo no arquivo letra.txt : Numa folha qualquer eu desenho um sol amarelo E com cinco ou seis retas é fácil fazer um castelo. Corro o lápis em torno da mão e me dou uma luva, E se faço chover, com dois riscos tenho um guarda-chuva. Se um pinguinho de tinta cai num pedacinho azul do papel, Num instante imagino uma linda gaivota a voar no céu. Vai voando, contornando a imensa curva Norte e Sul, Vou com ela, viajando, Havai, Pequim ou Istambul. Pinto um barco a vela branco, navegando, é tanto céu e mar num beijo azul. Entre as nuvens vem surgindo um lindo avião rosa e grená. Tudo em volta colorindo, com suas luzes a piscar. Basta imaginar e ele está partindo, sereno, indo, E se a gente quiser ele vai pousar. Numa folha qualquer eu desenho um navio de partida Com alguns bons amigos bebendo de bem com a vida. De uma América a outra consigo passar num segundo, Giro um simples compasso e num círculo eu faço o mundo. Um menino caminha e caminhando chega no muro E ali logo em frente, a esperar pela gente, o futuro está. E o futuro é uma astronave que tentamos pilotar, Não tem tempo nem piedade, nem tem hora de chegar. Sem pedir licença muda nossa vida, depois convida a rir ou chorar. Nessa estrada não nos cabe conhecer ou ver o que virá. O fim dela ninguém sabe bem ao certo onde vai dar. Vamos todos numa linda passarela De uma aquarela que um dia, enfim, descolorirá. Numa folha qualquer eu desenho um sol amarelo (que descolorirá). E com cinco ou seis retas é fácil fazer um castelo (que descolorirá). Giro um simples compasso e num círculo eu faço o mundo (que descolorirá). Autor: Toquinho 1
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
2
Orientações Éticas para Trabalhos Práticos em Programação
Linguagens de Programação
MACKENZIE
14
Notas de Aula: Teoria da Computação - Reduções
Linguagens de Programação
MACKENZIE
7
Análise da Complexidade de Espaço em Algoritmos
Linguagens de Programação
MACKENZIE
1
Prova sobre Programação Orientada a Objetos
Linguagens de Programação
FEI
1
Anotações sobre Design de Software e Atividades de Desenvolvimento
Linguagens de Programação
DESCOMPLICA
17
Análise de Algoritmos e Teoria da Computabilidade
Linguagens de Programação
UNINASSAU
1
Cálculo da Média Aritmética entre Dois Maiores Números em Python
Linguagens de Programação
UNIFTC
3
Documentação e Programação do Sistema de Compra de Ingressos do Grupo Mariano Pinheiro
Linguagens de Programação
UMG
1
Desenvolvimento de Máquina Virtual para Emulação de CPU
Linguagens de Programação
UVA
1
Comandos e Consultas em SQL: A Importância do DQL
Linguagens de Programação
UNIANCHIETA
Texto de pré-visualização
FACULDADE DE COMPUTAÇÃO E INFORMÁTICA CIÊNCIA DA COMPUTAÇÃO E SISTEMAS DE INFORMAÇÃO Linguagem de Programação I Aula 10: Arquivos – Gravação Nossos objetivos nesta aula são: Aprender a efetuar em Python as operações fundamentais para realizar a escrita de dados em um arquivo texto. Capturar e tratar exceções relacionadas às operações realizadas em arquivos texto. A referência para esta aula está no Capítulo 8 do livro: DIERBACH, C. Introduction to Computer Science Using Python: A Computational Problem Solving Focus. 1st Edition , New York: Wiley , 2012. Escrita de dados em um arquivo texto Para escrever dados em um arquivo texto é necessário primeiramente abrir o arquivo para leitura . Para isso, utiliza-se a função open conforme o exemplo abaixo: arquivo = open( 'nome_arquivo.txt', 'w') Este exemplo realiza a abertura de um arquivo com o nome nome_arquivo.txt , que é passado como o primeiro argumento na chamada da função. O segundo argumento (a letra w, que é a inicial de write ) indica que o arquivo está sendo aberto para escrita. Como já vimos anteriormente, pode-se especificar o caminho completo ou o caminho relativo até o arquivo se ele não estiver no mesmo diretório onde o programa está sendo executado. Quando a abertura do arquivo é realizada com sucesso, a função retorna um objeto do tipo arquivo. Para escrever dados podemos utilizar o método write do arquivo, chamando-o quantas vezes forem necessárias. arquivo.write ('Americana x Portuguesa') Ao contrário da função print com a qual estamos acostumados, o método write não adiciona automaticamente uma nova linha ao final. Desta forma, se quisermos que após a escrita dos dados seja acrescentada uma nova linha, é necessário adicionar o caractere de controle ''. arquivo.write ('Bragantino x Flamengo\n') Finalmente, após o programar terminar de escrever os dados desejados no arquivo, deve ser realizada a operação de fechamento do arquivo utilizando o método close . arquivo.close () A execução do fechamento é importante para garantir que todos os dados sejam efetivamente gravados no arquivo. Isto é necessário porque, ao escrever em um arquivo, os dados são primeiramente armazenados em uma área temporária da memória chamada de buffer , e eles são efetivamente gravados no arquivo quando o buffer fica cheio. O método close força a escrita no arquivo dos dados do buffer que ainda não foram gravados. EXEMPLO 1 Vamos desenvolver um programa que solicite o número de times que irão participar do campeonato e, a seguir, solicite o nome de cada time. Os dados dos times deverão ser gravados em um arquivo chamado times_campeonato.txt , sendo que a informação de cada time deverá ficar em uma linha separada, no formato: # Nome do time:ESTADO num_times = int ( input ( ' Número de times: ' )) meu_arquivo = open ( 'times_campeonato.txt' , 'w' ) for cont in range ( num_times ): nome = input ( 'Nome do time número ' + str (cont + 1 ) + ': ' ) estado = input ( 'Estado do time número ' + str (cont + 1 ) + ': ' ) meu_arquivo.write ( nome + ':' + estado + ' \n ' ) meu_arquivo.close () Resultado da execução: Número de times: 5 Nome do time número 1: Santos Estado do time número 1: SP Nome do time número 2: Guarani Estado do time número 2: SP Nome do time número 3: Vasco Estado do time número 3: RJ Nome do time número 4: Coritiba Estado do time número 4: PR Nome do time número 5: Palmeiras Estado do time número 5: SP Se abrirmos o arquivo times_campeonato.txt em um editor de textos, veremos os dados dos times que acabamos de entrar. Bloco de notas com times LEITURA DO ARQUIVO UTILIZANDO UM LAÇO FOR Na aula passada aprendemos a ler os dados de um arquivo utilizando o método readline . No entanto, se desejamos ler sequencialmente todas as linhas do arquivo até o final, podemos também utilizar um laço for . EXEMPLO 2 O programa abaixo lê as linhas do arquivo times_campeonato.txt utilizando um laço for e imprime os nomes dos times na tela. times_arquivo = open ( 'times_campeonato.txt' , 'r' ) for linha in times_arquivo : print ( 'Nome do time:' , linha.rstrip ()) times_arquivo.close () Resultado da execução: Nome do time: Santos:SP Nome do time: Guarani:SP Nome do time: Vasco:RJ Nome do time: Coritiba:PR Nome do time: Palmeiras:SP Programas que usam arquivos de entrada e saída É comum termos programas que leem os dados de um arquivo (chamado de arquivo de entrada), realizam algum processamento e escrevem os resultados em um outro arquivo (chamado de arquivo de saída). EXEMPLO 3 Vamos desenvolver um programa que tem como arquivo de entrada o arquivo times_campeonato.txt (que foi criado no Exemplo 1) e que gera como saída o arquivo times_sp.txt , que deve contem somente os nomes dos times do estado de São Paulo. times_arquivo = open ( 'times_campeonato.txt' , 'r' ) times_sp_arquivo = open ( 'times_sp.txt' , 'w' ) for linha in times_arquivo : registro_time = linha.rstrip () info_time = registro_time.split ( ':' ) nome = info_time [ 0 ] estado = info_time [ 1 ] if estado == 'SP' : times_sp_arquivo.write ( nome + ' \n ' ) times_arquivo.close () times_sp_arquivo.close () Se abrirmos o arquivo times_sp.txt em um editor de textos, veremos somente os nomes dos times de SP. Bloco de notas com times de SP EXERCÍCIO TUTORADO 1 Desenvolva um programa que leia os times cadastrados no arquivo times_campeonato.txt (o mesmo definido no Exemplo 1) e utilize estes times para montar um campeonato do tipo todos contra todos em turno único, onde cada um dos competidores enfrenta todos os demais apenas uma vez. Para isso, seu programa deverá: Ler os times que estão no arquivo times_campeonato.txt . Gerar os jogos do campeonato. Salvar as informações dos jogos em um arquivo chamado jogos_turno_unico.txt , sendo que cada jogo deverá ser salvo em uma linha separada no formato: TimeA:TimeB Por exemplo, suponha que há somente 3 times cadastrados no arquivo times_campeonato.txt : Guarani, Portuguesa e Palmeiras. Neste caso, o seu programa deveria apresentar como resultado o arquivo jogos_turno_unico.txt com o seguinte conteúdo: Guarani:Portuguesa Guarani:Palmeiras Portuguesa:Palmeiras Exceções Durante a execução de programas Python podem ocorrer erros que causam a interrupção abrupta da execução. Estes erros são chamados de exceções . Por exemplo, se no programa do exemplo 2 (que lê o conteúdo do arquivo times_campeonato.txt e imprime na tela) tivéssemos errado o nome do arquivo, estaríamos tentando abrir um arquivo que não existe. times_arquivo = open ( 'times_campo.txt' , 'r' ) for linha in times_arquivo : print ( 'Nome do time:' , linha.rstrip ()) times_arquivo.close () Resultado da execução: --------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) <ipython-input-14-db23a71b0a44> in <module >( ) ----> 1 times_arquivo = open( 'times_campo.txt', 'r') 2 for linha in times_arquivo : 3 print('Nome do time:', linha.rstrip ()) 4 times_arquivo.close () FileNotFoundError : [ Errno 2] No such file or directory: 'times_campo.txt' Esta exceção causa uma interrupção abrupta na execução da linha 1 do programa: times_arquivo = open( 'times_campo.txt', 'r') A exceção que foi lançada neste exemplo é identificada pelo nome FileNotFoundError . Para evitar a interrupção abrupta da execução do programa, as exceções podem ser capturadas e tratadas . Para isso, utiliza-se a estrutura try-except . Tratamento de exceções utilizando try-except Dentro do bloco try coloca-se a sentença que podem gerar a exceção e as sentenças que dependem do sucesso da execução desta primeira sentença. No nosso exemplo anterior, colocaríamos dentro do bloco try praticamente todo o programa inicial: nome_arquivo = input( 'Nome do arquivo com os dados do time: ') try: times_arquivo = open( nome_arquivo , 'r') for linha in times_arquivo : print('Nome do time:', linha.rstrip ()) times_arquivo.close () Para tratar a exceção, identificamos a exceção que será tratada (no nosso caso FileNotFoundError ) logo após a palavra except e definimos um bloco com o que deverá ser executado caso a exceção ocorra. except FileNotFoundError : print( 'O arquivo ', nome_arquivo , ' não foi encontrado ') EXEMPLO 4 O programa abaixo trata a exceção FileNotFoundError de forma a informar de uma "maneira civilizada" que o arquivo não foi encontrado. nome_arquivo = input ( 'Nome do arquivo com os dados do time: ' ) try : times_arquivo = open ( nome_arquivo , 'r' ) print ( ' Arquivo ' , nome_arquivo , ' encontrado !' ) for linha in times_arquivo : print ( 'Nome do time:' , linha.rstrip ()) times_arquivo.close () except FileNotFoundError : print ( 'O arquivo ' , nome_arquivo , ' não foi encontrado ' ) Resultado da execução> Nome do arquivo com os dados do time: times_campo.txt O arquivo times_campo.txt não foi encontrado Note que quando a exceção ocorre na execução da função open , o fluxo da execução do programa é desviado para o bloco except . EXERCÍCIO TUTORADO 2 O programa abaixo solicita que você digite a sua idade e apresenta qual será a sua idade daqui a um ano. idade = int ( input ( ' Sua idade : ' )) proxima = idade + 1 print ( ' Ano que vem você terá ' , proxima , ' anos ' ) Resultado da execução: Sua idade : trinta --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-bc6d2eb74af8> in <module>() ----> 1 idade = int(input(' Sua idade : ')) 2 proxima = idade + 1 3 print(' Ano que vem você terá ', proxima , ' anos ') ValueError : invalid literal for int() with base 10: ' trinta ' No entanto, como podemos ver acima, se o usuário entrar letras e não números, ocorre uma exceção chamada ValueError na execução da linha idade = int( input(' Sua idade : ')) Faça o tratamento desta exceção, apresentando a mensagem "Entre somente dígitos!" quando esta exceção ocorrer. Exercícios Os jogos do campeonato estão registrados no arquivo jogos_turno_unico.txt , onde cada jogo é definido por uma linha do arquivo no formato: TimeA:TimeB Você precisa registrar os resultados dos jogos do campeonato. Para isso, desenvolva um programa que: Leia os jogos cadastrados no arquivo jogos_turno_unico.txt . Em cada jogo, solicite que o usuário informe o número de gols marcados por cada time no jogo. Você pode, por exemplo, estabelecer a seguinte sequência de interação: Jogo: Guarani x Santos Número de gols marcados pelo Guarani: ____ Número de gols marcados pelo Santos: ____ Grave no arquivo resultados_jogos_turno_unico.txt um resultado por linha no formato: TimeA:Gols_TimeA:TimeB:Gols_TimeB Exemplo de conteúdo do arquivo resultados_jogos_turno_unico.txt após a execução do programa: Corinthians:5:Palmeiras:1 São Paulo:1:Corinthians:6 Palmeiras:3:São Paulo:3 Palmeiras:4:Guarani:5 Guarani:1:Corinthians:2 São Paulo:3:Guarani:4 No exercício anterior, o programa sempre busca os jogos no arquivo com o nome jogos_turno_unico.txt . Altere o programa para que no início da execução ele solicite o nome do arquivo com os jogos. Caso ocorra a exceção FileNotFoundException , seu programa deverá apresentar a mensagem "Arquivo não encontrado!" e solicitar novamente o nome do arquivo até que seja fornecido o nome de um arquivo existente. O programa do exercício anterior solicita que o usuário entre o número de gols de cada time, esperando que o usuário entre apenas dígitos. Caso o usuário não entre somente dígitos (por exemplo, entre letras ou símbolos), ocorrerá a exceção ValueError . Modifique o programa para que trate esta exceção e, caso ela ocorra, volte a solicitar que o usuário entre o número de gols. Isto deve se repetir até que ele forneça uma entrada válida. Exercícios extras Desenvolva um programa que gere os jogos do campeonato utilizando o sistema de todos contra todos com turno e returno (ou seja, cada competidor enfrenta todos os demais duas vezes, alternando os campos onde a partida é realizada). Para isso, seu programa deverá: Ler os times que estão no arquivo times_campeonato.txt (arquivo especificado no Exemplo 1 desta aula). Gerar os jogos do campeonato. Salvar as informações dos jogos em um arquivo chamado jogos_turno_returno.txt , sendo que cada jogo deverá ser salvo em uma linha separada no formato: TimeA:TimeB:Campo Exemplo de conteúdo do arquivo jogos_turno_returno.txt : Corinthians:Santos:campo do Corinthians Corinthians:Guarani:campo do Corinthians Santos:Corinthians:campo do Santos Santos:Guarani:campo do Santos Guarani:Corinthians:campo do Guarani Guarani:Santos:campo do Guarani Seu superior tem um arquivo texto com o nome salarios.csv que possui os salários de todos os funcionários da empresa. Cada linha deste arquivo contém as informações de um funcionário, no formato: número_funcional:salário Exemplo de conteúdo do arquivo: 1150072:5001.99 1147778:2321.45 1194720:1345.01 1009999:6432.55 Seu superior precisa que você desenvolva um programa em Python que leia o conteúdo deste arquivo e gere um novo arquivo chamado salarios_5000.csv , somente com as informações dos funcionários que ganham um salário maior ou igual a R$ 5000,00. O formato de cada linha do arquivo deve ser igual ao do arquivo original. Desenvolva o programa solicitado. Desenvolva um programa que conte o número de vezes que cada letra do alfabeto aparece no texto do arquivo letra.txt . Ao final da execução, o resultado da contagem deverá ser escrito no arquivo resultado.txt , onde cada linha terá o formato: letra:contagem O programa deverá somar a contagem de ocorrências das minúsculas e maiúsculas de cada letra. Desta forma, a contagem que o arquivo apresenta para a letra A, por exemplo, deverá incluir tanto as ocorrências da minúscula (a) quanto da maiúscula (A). Faça um teste executando o seu programa com o seguinte conteúdo no arquivo letra.txt : Numa folha qualquer eu desenho um sol amarelo E com cinco ou seis retas é fácil fazer um castelo. Corro o lápis em torno da mão e me dou uma luva, E se faço chover, com dois riscos tenho um guarda-chuva. Se um pinguinho de tinta cai num pedacinho azul do papel, Num instante imagino uma linda gaivota a voar no céu. Vai voando, contornando a imensa curva Norte e Sul, Vou com ela, viajando, Havai, Pequim ou Istambul. Pinto um barco a vela branco, navegando, é tanto céu e mar num beijo azul. Entre as nuvens vem surgindo um lindo avião rosa e grená. Tudo em volta colorindo, com suas luzes a piscar. Basta imaginar e ele está partindo, sereno, indo, E se a gente quiser ele vai pousar. Numa folha qualquer eu desenho um navio de partida Com alguns bons amigos bebendo de bem com a vida. De uma América a outra consigo passar num segundo, Giro um simples compasso e num círculo eu faço o mundo. Um menino caminha e caminhando chega no muro E ali logo em frente, a esperar pela gente, o futuro está. E o futuro é uma astronave que tentamos pilotar, Não tem tempo nem piedade, nem tem hora de chegar. Sem pedir licença muda nossa vida, depois convida a rir ou chorar. Nessa estrada não nos cabe conhecer ou ver o que virá. O fim dela ninguém sabe bem ao certo onde vai dar. Vamos todos numa linda passarela De uma aquarela que um dia, enfim, descolorirá. Numa folha qualquer eu desenho um sol amarelo (que descolorirá). E com cinco ou seis retas é fácil fazer um castelo (que descolorirá). Giro um simples compasso e num círculo eu faço o mundo (que descolorirá). Autor: Toquinho 1