Você está na página 1de 22

Programação em Python 6ª sessão

19.outubro.2021

- A SINTAXE -
Formador José Calado

Objetivos da sessão
Objetivos da Sessão
● Ficheiros
● Pastas e Sub-Pastas

Recursos necessários para a sessão

Software
● Python Editor: https://www.python.org/downloads/
● PyCharm: LINK

Documentos
● (Este guião)

Plataformas / Páginas Web


● Plataforma Moodle da Formação (Sessão): LINK

Bibliografia Suplementar

https://www.w3schools.com/python/default.asp

José Calado
jose.calado@anpri.pt 1 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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.

José Calado
jose.calado@anpri.pt 2 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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 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.

José Calado
jose.calado@anpri.pt 3 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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.

José Calado
jose.calado@anpri.pt 4 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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

José Calado
jose.calado@anpri.pt 5 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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.

José Calado
jose.calado@anpri.pt 6 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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) escrever uma cadeia


● f.read() lê todo o conteudo (uma “string”)
● f.read(n) lê apenas n caracteres

José Calado
jose.calado@anpri.pt 7 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

● f.readline() lê uma linha de texto


● f.readlines() lê o conteúdo e dividi em lista
● f.close() terminar leitura/escrita no ficheiro

Importante: deve sempre usar close para garantir que o ficheiro é escrito
correctamente!

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().

José Calado
jose.calado@anpri.pt 8 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

Exemplo de escrita
>>> f = open("teste.txt", "w")
>>> f.write("Olá mundo!")
>>> f.write("Adeus mundo...")
>>> f.close()

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())

José Calado
jose.calado@anpri.pt 9 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

>>>>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 arquivo.
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.

José Calado
jose.calado@anpri.pt 10 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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(‘exemploSessao6.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()

José Calado
jose.calado@anpri.pt 11 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

--------------------------------------------------

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(‘exemploSessao6.txt’, ‘r’)


for linha in lerFicheiro:
print linha

lerFicheiro.close()

José Calado
jose.calado@anpri.pt 12 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

Utilizando o ciclo WHILE

Ao contrário do ciclo FOR, este ciclo já necessita que utilizemos a


função readline().

lerFicheiro = open(‘exemploSessao6.txt’, ‘r’)


While True:
#lê a linha
linha = lerFicheiro.readline()
print(linha)
#verifica se a linha está vazia
if not linha
break
lerFicheiro.close()

José Calado
jose.calado@anpri.pt 13 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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(‘anpri.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.

José Calado
jose.calado@anpri.pt 14 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

for i in range(10):

ficheiro.write("Escreve esta linha %d\r\n" % (i+1))

3º passo

ficheiro.close()

Nunca esquecer o comando para encerrar o acesso ao ficheiro.

Para acrescentar conteúdo ao ficheiro

1º Passo

ficheiro = open(‘anpri.txt’, ‘a+’)

Como vimos no quadro acima, iremos utilizar o comando associado ao


append, 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.

José Calado
jose.calado@anpri.pt 15 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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

# detecta 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.

José Calado
jose.calado@anpri.pt 16 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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….

José Calado
jose.calado@anpri.pt 17 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

import os

# definimos o nome das pastas a criar


path = "pastaTeste/Anpri/Python/Turma 1"

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.

José Calado
jose.calado@anpri.pt 18 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

Ficheiros (continuação)

Função split

Esta função é muito útil quando estamos a trabalhar com palavras/texto. Com
esta simples função permite “partir” 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 = ‘Boa noite a tod@s os formand@s’

x = txt.split()

print(x)

Exemplo 2:

José Calado
jose.calado@anpri.pt 19 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

txt = "Boa Noite, esta é a sessão 7, de Python"

x = txt.split(", ")

print(x)

Exemplo 3:

txt = "pera#banana#morangos#laranja"

x = txt.split("#")

print(x)

--------------------------------------------------------------------------------------------------

Pegando no ficheiro que está partilhado no Moodle, ou descarregando


diretamente da drive, vamos então realizar as nossas atividades.

Nota: o ficheiro partilhado é um mero exemplo, podendo ser utilizado qualquer outro
ficheiro para o efeito.

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.

José Calado
jose.calado@anpri.pt 20 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

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.

José Calado
jose.calado@anpri.pt 21 de 22 ANPRI - MOODLE
Programação em Python 6ª sessão
19.outubro.2021

ATIVIDADE 3

Decide ir às compras, 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

José Calado
jose.calado@anpri.pt 22 de 22 ANPRI - MOODLE

Você também pode gostar