Universidade Federal de Pernambuco – UFPE Centro de Informática
Sistemas de Informação IF968 – Programação 1 Professor: Renato Vimieiro
Lista de exercícios práticos 4 – Manipulação de arquivos e funções
Entrega: 18/05/16Instruções
• Faça os algoritmos em python.
• Faça um algoritmo por arquivo.
• Utilize o template disponível no site da disciplina
Manipulação de arquivos e definição de funções em Python
Procedimentos e funções
Funções são definidas em Python através da palavra reservada def. A definição segue a mesma lógica vista em pseudocódigo, isto é, utiliza-se a palavra reservada para indicar que se está declarando uma função, em seguida define-se seu identificador, seguido da lista de parâmetros. A sintaxe é a seguinte:
def <identificador> (<parâmetros>):
<lista de cmds>
return <valor>
Note que em Python não há distinção entre procedimentos e funções. Sendo assim, a instrução return pode ou não ser utilizada, dependendo se o sub-programa retorna ou não algum valor.
A seguir é dado um exemplo de um procedimento e função:
def exibe_vetor (vetor):
for i in xrange(len(vetor)):
print vetor[i]
def abs (n):
if n < 0: return -1 * n return n
Essas funções são chamados no programa principal da mesma forma que em pseudocódigo. Um exemplo é o programa principal a seguir:
import numpy as np
# aqui vem a definicao das funcoes x = np.ones(5,"int")
exibe_vetor(x) print abs(-5)
Há uma importante diferença entre pseudocódigo e Python em relação aos parâmetros de uma função. Em Python, além da notação posicional em que a ordem dos argumentos corresponde aos parâmetros formais da função, é possível também passar argumentos por nomeação. No caso de passagem de parâmetro por nomeação, é possível desvincular-se da ordem original dos parâmetros desde que se identifique a quem deve ser atribuído um certo valor.
Considere o seguinte exemplo:
def soma_naturais (n,m):
soma = 0
for i in xrange(n,m):
soma += i return soma
A chamada dessa função no programa principal pode ser feita passando-se em ordem os valores de n e m, ou dizendo-se qual valor será atribuído a cada parâmetro:
print soma_naturais(10,50) print soma_naturais(m=50,n=10)
1
Arquivos
Como visto anteriormente, todos os dados são armazenados em formato binário em um computador, mesmo os aqueles textuais. Entretanto, ao se trabalhar com arquivos, faz-se distinção entre dois tipos: arquivos binários e arquivos texto. Em arquivos texto, a informação é armazenada, como o próprio nome diz, em formato textual. Em outras palavras, o arquivo contém um conjunto de strings representando os dados armazenados, logo números são convertidos para caracteres/strings antes de serem gravados. Já em arquivos binários, os dados são armazenados diretamente utilizando-se a mesma representação usada em memória principal. Logo, inteiros são armazenados como inteiros (conjunto de 32/64 bits, por exemplo), floats são armazenados como floats, e assim por diante.
O ciclo básico de trabalho com qualquer tipo de arquivo é basicamente o mesmo: abertura, escrita/leitura, e fechamento.
Abertura
A sintaxe para abertura de um arquivo em Python é a seguinte:
<identificador> = open(<caminho>,<modo_de_abertura>)
O identificador será usado para acessar os dados do arquivo similar ao que é feito com outras variáveis. O caminho, que deve ser uma expressão do tipo string, especifica o local em que o arquivo se encontra no disco. O modo de abertura especifica qual o uso (leitura/escrita) e formato (binário/texto) do arquivo. Os modos listados na tabela abaixo estão disponíveis em Python (texto traduzido de http://www.tutorialspoint.com/python/python_files_io.htm):
Modo Descrição
r Abre arquivo texto somente para leitura.
rb Abre arquivo binário somente para leitura.
r+ Abre arquivo texto para leitura e escrita. O arquivo deve existir no sistema.
rb+ Abre arquivo binário para leitura e escrita.
w Abre arquivo texto somente para escrita. Se o arquivo não existir, ele será criado, caso contrário ele será sobrescrito.
wb Abre arquivo binário somente para escrita. Se o arquivo não exis- tir, ele será criado, caso contrário ele será sobrescrito.
w+ Abre arquivo texto para leitura e escrita. Se o arquivo não existir, ele será criado, caso contrário ele será sobrescrito.
wb+ Abre arquivo binário para leitura e escrita. Se o arquivo não existir, ele será criado, caso contrário ele será sobrescrito.
a Abre arquivo para anexar conteúdo. Se o arquivo existir, ele será aberto no final para acrescentar dados; caso contrário será criado.
ab Abre arquivo binário para anexar conteúdo. Se o arquivo existir, ele será aberto no final para acrescentar dados; caso contrário será criado.
a+ Abre arquivo texto para leitura e escrita. Se o arquivo existir, ele será aberto no final para acrescentar dados; caso contrário será criado. O conteúdo não é sobrescrito
ab+ Abre arquivo binário para leitura e escrita. Se o arquivo existir, ele será aberto no final para acrescentar dados; caso contrário será criado. O conteúdo não é sobrescrito
Recomenda-se a leitura do endereço apontado acima para conhecer as demais funcionalidades disponíveis.
Fechamento
Tendo terminado de usar o arquivo, o usuário deve fechá-lo. Isso informa ao sistema operacional que o programa não mais usará o arquivo e, assim, qualquer dado que ainda não tenha sido fisicamente escrito no arquivo
1será armazenado em disco.
A sintaxe para fechamento de um arquivo é a seguinte:
<identificador>.close()
Veja um exemplo em que um arquivo em branco é criado (abertura para gravação) e fechado imediatamente.
f = open("teste_arquivo_python.txt","w") f.close()
1O sistema pode aguardar até que um númeroxde bytes seja escrito antes que eles sejam de fato armazenados no disco. Essa técnica, chamada de buferização, permite um melhor desempenho computacional visto que acessos ao disco são extremamente lentos. Dessa forma, com o uso de buffers (repositórios onde os dados são armazenados temporariamente), substitui-se o acesso para cada dado a ser gravado, por um acesso único para gravação de todos os dados no buffer.