400725
Programação em Python
- A SINTAXE -
Professor: G. Pereira
Objetivos do guião n.º 6
● Ficheiros
● Pastas e Sub-Pastas
Recursos necessários para a aula
Software
● Python Editor: https://www.python.org/downloads/
● PyCharm: LINK
●
Documentos
● (Este guião)
Plataformas / Páginas Web
● Plataforma Moodle da Disciplina
Bibliografia Suplementar
https://www.w3schools.com/python/default.asp
Aplicações Informáticas B 1 de 21 Prof. G. Pereira
400725
Programação em Python
Ficheiros
Se há algo que nós fazemos, sempre que trabalhamos no computador
é manipular ficheiros. Sejam eles de diversa ordem, formato, tamanho, etc.
Estamos em constante manipulação de ficheiros, de forma frequente, a
manipular informação, a consultar dados diversos, com objetivos diferentes
de cada utilizador.
A manipulação de ficheiros irá de certa maneira permitir, que os dados
que nós vamos trabalhar a partir deste momento, se tornem persistentes,
que a informação deixe de volátil, pois sempre que executamos um
programa, é apresentada a informação na consola, e encerramos o
programa, a informação perde-se. Podemos a partir deste momento, criar e
reutilizar a informação, sempre que for necessário.
Vamos então trabalhar com a manipulação de ficheiros.
Tipos de Ficheiros: Texto Simples e Texto Binário
Um ficheiro pode ser um texto simples. Um ficheiro de texto
(plaintext) é uma sequência de caracteres, sem informações sobre
formatação.
Cada linha de um ficheiro de texto é terminada com um caractere
especial de fim de linha, EOL (End of Line).
No geral, é o caracter newline (\n). Esse caracter finaliza a linha atual e diz
ao interpretador que uma nova linha começa.
Aplicações Informáticas B 2 de 21 Prof. G. Pereira
400725
Programação em Python
Um ficheiro binário é um qualquer ficheiro que não seja considerado
um ficheiro de texto padrão. Este tipo de ficheiros, só podem ser
processados por uma aplicação específica, que compreenda a estrutura do
ficheiro. Como por exemplo, um ficheiro PDF, um ficheiro mp3, um ficheiro
de excel, etc.
Trabalhar com Ficheiros em Python
Para trabalharmos com ficheiros em Python teremos que utilizar o
objeto file.
Os objetos file possuem métodos e atributos que podem ser usados
para recolher informações e trabalhar o ficheiro.
Um objeto file possui um atributo nome, que é o nome do ficheiro a
ser manipulado, e um atributo modo, que é a forma como o ficheiro será
acedido.
Aplicações Informáticas B 3 de 21 Prof. G. Pereira
400725
Programação em Python
Modo de Acesso aos Ficheiros
Modo Tipos de Acesso
r Somente de Leitura
w Escrita, apagando (substituindo) o
conteúdo existente no ficheiro
a Escrita, preservando o conteúdo
existente (append). O ficheiro é
criado, se não existir. O texto é
inserido no final do ficheiro.
b Modo binário
+ Abre o ficheiro para actualização -
leitura e escrita
x Abre o ficheiro para criação
exclusiva, falhando se o ficheiro já
existir
t Modo de texto
É possível, realizar combinações, por exemplo, r+, w+, w+b. Caso não seja
indicado nenhum MODO, por defeito o modo de acesso é o r.
Aplicações Informáticas B 4 de 21 Prof. G. Pereira
400725
Programação em Python
Em resumo, sendo que:
read - permissão de leitura
write - permissão de escrita
create - o ficheiro é criado, caso ainda não exista
truncate - quando o ficheiro é aberto, todo o conteúdo é eliminado
position at start - quando o ficheiro é aberto, o cursor está colocado no
início do ficheiro
position at end- quando o ficheiro é aberto, o cursor está colocado no fim
do ficheiro
r r+ w w+ a a+
read + + + +
write + + + + +
write after + + +
seek
create + + + +
truncate + +
position at + + + +
start
position at + +
end
Aplicações Informáticas B 5 de 21 Prof. G. Pereira
400725
Programação em Python
A fim de termos uma ação correta na manipulação de
ficheiros, devemos efetuar as seguintes operações:
1. Abrir o Ficheiro pretendido
2. Chamar os métodos adequados (leitura/escrita)
3. Executar o processamento dos dados do ficheiro
4. Fechar o ficheiro
A função open(), retorna um objeto que irá permitir manipular/trabalhar
com ficheiros.
Aplicações Informáticas B 6 de 21 Prof. G. Pereira
400725
Programação em Python
Sintaxe:
Ficheiro = open(ficheiro, modo)
>>> f = open("test.dat","w")
>>> type(f)
type ‘file?
>>> print f
<open file ’test.dat’, mode ’w’ at fe820>
Métodos sobre ficheiros
Abrir um ficheiro
f = open(caminho, modo)
Modos em resumo:
● ’r’ leitura (ficheiro deve já existir)
● ’w’ escrita (se o ficheiro já existir: remove o conteúdo)
● ’a’ escrita (se o ficheiro já existir: acrescenta ao final)
Métodos sobre ficheiros
Mais comuns:
● f.write(str) escreve uma cadeia
● f.read() lê todo o conteúdo (uma “string”)
● f.read(n) lê apenas n caracteres
● f.readline() lê uma linha de texto
● f.readlines() lê o conteúdo e divide em lista
● f.close() termina leitura/escrita no ficheiro
Aplicações Informáticas B 7 de 21 Prof. G. Pereira
400725
Programação em Python
Importante: deves sempre usar close para garantir que o ficheiro é escrito
corretamente!
NOTA:
Não é necessário importar qualquer módulo para podermos trabalhar com
ficheiros no Python.
Informação:
Quando um ficheiro é lido, o Python mantém um registo da posição de
leitura no ficheiro. Se utilizarmos a função read(), a posição do “cursor” será
o final do ficheiro, isto porque a função devolve/apresenta o conteúdo do
ficheiro todo. Se repetíssemos a utilização da função read(), logo em
seguida, o resultado seria uma String vazia.
A posição do cursor pode ser alterada, utilizando para isso a função
seek(), que recebe como argumento a posição desejada, um deslocamento
em bytes. Para colocar novamente o cursor na posição inicial, usamos o
comando seek(0), se pretendermos colocar numa outra posição, colocamos
por argumento o valor do caractere (um caractere equivale a um byte) em
que queremos que surja. Por exemplo, seek(16). Ter em atenção que
carateres especiais ocupam mais do que um caractere.
Se quisermos saber em que posição está o cursor, usamos o comando
tell().
Exemplo de escrita
>>> f = open("teste.txt", "w")
>>> f.write("Olá mundo!")
>>> f.write("Adeus mundo...")
>>> f.close()
Aplicações Informáticas B 8 de 21 Prof. G. Pereira
400725
Programação em Python
Exemplo de leitura
>>> f = open("teste.txt", "r")
>>>print(f.read())
’Olá mundo! Adeus mundo...’
>>> f.close()
Podemos ainda utilizar o comando tell, que nos indica a posição do cursor
no ficheiro
>>>> f = open(‘teste.txt’, ‘r’)
>>>>print(‘Posição atual no arquivo: ‘+f.tell())
>>>>print(f.read())
>>>>print(‘Posição atual no arquivo: ‘+f.tell())
>>>>print(f.read())
>>>>f.seek(0)
>>>>print(‘Posição atual no arquivo: ‘+f.tell())
>>>>print(f.read())
>>>>f.close()
Perceberam?!?!?!
Podemos ainda, usar a função read() para ler um número determinado de
caracteres, bastando para isso passar por argumento da função, a
quantidade de bytes que pretendemos ler. Por exemplo, se quisermos ler os
primeiros 8 bytes do ficheiro.
Aplicações Informáticas B 9 de 21 Prof. G. Pereira
400725
Programação em Python
Exemplo:
f.read(8)
Métodos readline() e readlines()
Vimos entretanto a função read(), no entanto é possível ler os
conteúdos de um ficheiro usando outras funções, que são a readlline() e a
readlines().
Método readline()
Sempre que nós chamamos esta função, ela lê uma linha de texto, e o
cursor que vai controlando as linhas que compõem o texto do ficheiro, é
incrementada.
Em resumo, lê a linha e passa para a seguinte.
Aplicações Informáticas B 10 de 21 Prof. G. Pereira
400725
Programação em Python
Método readlines()
Retorna uma lista de valores de String do ficheiro, sendo que cada
String ou cada posição da lista, corresponde a cada linha do ficheiro de
texto.
Exemplo:
#Testando os métodos read(), readline() e readlines()
lerFicheiro = open(‘exemploguiao6.txt’, ‘r’)
print(‘\nMétodo read():\n’)
print(lerFicheiro.read())
lerFicheiro.seek(0) #volta para o início do ficheiro
print(‘\nMétodo readline():\n’)
print(lerFicheiro.readline())
print(lerFicheiro.readline())
lerFicheiro.seek(0) #volta para o início do ficheiro
print(‘\nMétodo readlines():\n’)
print(lerFicheiro.readlines())
lerFicheiro.close()
Aplicações Informáticas B 11 de 21 Prof. G. Pereira
400725
Programação em Python
Utilizando o ciclo FOR
Neste exemplo, podemos ver que não é necessário utilizar as
funções anteriormente estudadas, read(), readline() ou readlines()
lerFicheiro = open(‘exemploguiao6.txt’, ‘r’)
for linha in lerFicheiro:
print linha
lerFicheiro.close()
Utilizando o ciclo WHILE
Ao contrário do ciclo FOR, este ciclo já necessita que utilizemos a
função readline().
lerFicheiro = open(‘exemploguiao6.txt’, ‘r’)
While True:
#lê a linha
linha = lerFicheiro.readline()
print(linha)
#verifica se a linha está vazia
if not linha
break
lerFicheiro.close()
Aplicações Informáticas B 12 de 21 Prof. G. Pereira
400725
Programação em Python
Criar Ficheiros
Até agora temos estado apenas a aceder a ficheiros já criados, e se
criarmos de raiz os nossos ficheiros, escrevendo também através de scripts
o conteúdo.
1º Passo
ficheiro = open(‘esalv.txt’, ‘w+’)
Estamos a criar o nosso ficheiro, associado a um objeto, de modo a
que sempre que quisermos trabalhar com ele, este possa ser identificado,
como já vimos anteriormente.
O modo, é o ‘W’, comando de escrita, que nos vai permitir escrever no
ficheiro pretendido, bem como o comando ‘+’, que vai actualizar a
informação no ficheiro, como vimos aqui neste quadro. Esta opção acontece
porque o ficheiro está vazio, a outra opção seria utilizar o ‘a’, para realizar o
append da informação no ficheiro. A utilização desta solução, reforçamos
que o ficheiro não existe, logo terá que ser criado.
2º passo
ficheiro.write(‘Escrevemos esta linha’)
Utilizamos então o comando de escrita da linha, iremos utilizar e
repetir, tantas e quantas vezes nós quisermos de texto no nosso ficheiro.
Outra hipótese é utilizar ciclos de repetição para “encher” conteúdo do nosso
ficheiro.
for i in range(10):
ficheiro.write("Escreve esta linha %d\r\n" % (i+1))
Aplicações Informáticas B 13 de 21 Prof. G. Pereira
400725
Programação em Python
3º passo
ficheiro.close()
Nunca esquecer o comando para encerrar o acesso ao ficheiro.
Para acrescentar conteúdo ao ficheiro
1. º Passo
ficheiro = open(‘esalv.txt’, ‘a+’)
Como vimos no quadro acima, iremos utilizar o comando associado ao
append, isto é, adicionar informação a um conteúdo já existente.
2. º passo
ficheiro.write(‘Escrever esta nova linha’)
Também podemos utilizar um ciclo de repetição como no exemplo anterior.
3. º passo
ficheiro.close()
Nunca esquecer o comando para encerrar o acesso ao ficheiro.
Aplicações Informáticas B 14 de 21 Prof. G. Pereira
400725
Programação em Python
Pastas
Se os ficheiros vão permitir que guardemos informação, em diferentes
formatos, as pastas permitem organizar o arquivo desses mesmos
ficheiros. Através de scripts de Python é possível nós criarmos pastas e
sub-pastas diversas.
NOTA:
Nesta situação, teremos que importar um módulo, o módulo OS.
import os
Antes de avançarmos para a criação de novas pastas, podemos tentar
saber, qual a localização do nosso projeto, pedido ao Python que nos
devolva essa informação.
# importar o módulo
import os
# Deteta em que diretoria estamos a trabalhar e apresenta na consola
path = os.getcwd()
print ("The current working directory is %s" % path)
Usamos neste exemplo, o comando getcwd.
Aplicações Informáticas B 15 de 21 Prof. G. Pereira
400725
Programação em Python
Criar uma Diretoria
Para criarmos uma diretoria, iremos utilizar o tradicional mkdir.
Como argumento, devemos utilizar o caminho/localização onde queremos
criar a diretoria.
Exemplo:
import os
# definimos o nome da diretoria a criar
path = ‘pastaTeste’
try:
os.mkdir(path)
except OSError:
print ("Erro na criação da diretoria %s" % path)
else:
print ("Diretoria criada com sucesso %s " % path)
Usamos neste exemplo, o comando mkdir.
Devemos ter em atenção, que o comando mkdir, não permite criar
sub-diretorias, apenas podemos criar pastas de primeiro nível.
Para podermos criar mais pastas, e níveis abaixo, devemos utilizar o
comando makedirs().
Vamos ver o exemplo….
Aplicações Informáticas B 16 de 21 Prof. G. Pereira
400725
Programação em Python
import os
# definimos o nome das pastas a criar
path = "pastaTeste/esalv/Python/Turma 12B"
try:
os.makedirs(path)
except OSError:
print ("Creation of the directory %s failed" % path)
else:
print ("Successfully created the directory %s" % path)
Utilizamos neste exemplo, o comando makedirs().
Eliminar Diretorias
Seguindo a mesma lógica de desenvolvimento, iremos utilizar o comando
rmdir(), à semelhança dos comandos anteriores, requer o caminho da
diretoria que queremos eliminar.
NOTA: Só funciona se as diretorias estiverem VAZIAS.
Aplicações Informáticas B 17 de 21 Prof. G. Pereira
400725
Programação em Python
Ficheiros (continuação)
Função split
Esta função é muito útil quando estamos a trabalhar com
palavras/texto. Com esta simples função permite “quebrar” uma frase,
uma linha de texto de diversas maneiras, dando a possibilidade de podermos
trabalhar a informação de forma mais simples. A informação será convertida
numa lista
Sintaxe:
String.split(separador, max)
Sendo que:
Separador: Opcional. Podemos indicar um símbolo/caractere que sirva
de referência da separação, por exemplo a (,). Em caso de não ser utilizado,
será considerado o espaço entre as palavras como separador.
max: Opcional. Podemos indicar o número máximo de elementos a
compor a lista. Em caso de omissão, o número de elementos será o número
de palavras que estivermos a analisar numa linha, num texto, etc.
Exemplo 1:
txt = “Bom dia a tod@s os alun@s”
x = txt.split()
print(x)
Aplicações Informáticas B 18 de 21 Prof. G. Pereira
400725
Programação em Python
Exemplo 2:
txt = "Bom dia, este é o guião 6, de Python"
x = txt.split(", ")
print(x)
Exemplo 3:
txt = "pera#banana#morangos#laranja"
x = txt.split("#")
print(x)
Abre o ficheiro “exemplo2guiao6.txt” que está partilhado na
plataforma Moodle, para realizares as próximas atividades.
Nota: o ficheiro partilhado é um mero exemplo, podendo ser utilizado
qualquer outro ficheiro para o efeito.
Aplicações Informáticas B 19 de 21 Prof. G. Pereira
400725
Programação em Python
ATIVIDADE 1
Crie um programa em Python que recebendo um ficheiro de texto, peça ao
utilizador que pesquise uma determinada palavra no ficheiro. Caso esta
palavra exista, deverá ser devolvida a linha ou as linhas onde essa palavra
se encontra.
Garanta que o seu programa, consegue pesquisar a palavra, seja ela
inserida em maiúsculas ou minúsculas.
ATIVIDADE 2
Crie um programa em Python que peça ao utilizador que insira o nome de
um ficheiro de texto. O ficheiro deverá ter algum conteúdo (texto) e que
possa ser lido.
Deve garantir que o nome do ficheiro é inserido corretamente e este é
encontrado, apresentado o resultado final, caso contrário, deverá surgir
uma mensagem indicando que não foi possível abrir o ficheiro pretendido.
O programa deverá devolver de acordo com o texto lido:
● Nº de linhas
● Nº frases
● Nº de linhas vazias
● Nº de Palavras
Fica ao critério de cada um, caso queiram acrescentar uma outra pesquisa.
Aplicações Informáticas B 20 de 21 Prof. G. Pereira
400725
Programação em Python
ATIVIDADE 3
Decide ir às compras, deverá criar um programa em Python que o possa
auxiliar nessa situação. Crie previamente (ou peça ao utilizador) um
dicionário de produtos que possam existir num supermercado, inserindo o
seu nome e preço.
Apresente os elementos para que possa decidir quais os produtos a
comprar. Garanta que insere corretamente o nome dos produtos, em
seguida, peça a quantidade a comprar.
Vá escolhendo produtos e inserindo as respectivas quantidades. No final,
deverá surgir a informação dos produtos comprados, preço e quantidades
compradas, apresentando ainda o Valor Total a Pagar.
A. Altere o seu programa para que a informação apresentada na
consola, seja guardada da mesma maneira num ficheiro de nome
talaoCompra.txt
Aplicações Informáticas B 21 de 21 Prof. G. Pereira