53
Informática para as Ciências e Engenharias Versão : C (Engenharia Civil) Aula 7 Pedro Barahona 2018 / 19

Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Informática para as Ciências e EngenhariasVersão : C

(Engenharia Civil)Aula 7

Pedro Barahona2018 / 19

Page 2: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 2

Page 3: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 3

Page 4: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Discos e Afins

• Discos rígidos (magnéticos - HD)§ Mecânico: rotação do disco e

deslocamento da cabeça para ler eescrever informação.

• Discos de estado sólido (SSD)§ Eletrónico: acesso imediato a

qualquer posição para ler eescrever.

§ Mais rápidos que os discos rígidos(magnéticos).

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 4

Page 5: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Ficheiro

• Ficheiros permitem guardar informação de forma permanente.• Um ficheiro é um espaço de endereçamento logicamente con9guo,

contendo informação “inter-relacionada”.§ Um ficheiro pode conter dados (texto, imagem, som, etc.) ou

programas.• É acessível através de um idenDficador único (nome).• O nome de um ficheiro é uma sequência de caracteres (uma string em

Python).• O SO encarrega-se de gerir os ficheiros e os discos em que estes

residem. A organização do disco é escondida aos programadores euDlizadores.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 5

Page 6: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Tipos de ficheiros

• Ficheiros de texto§ Contêm apenas bytes que podem ser interpretados como

caracteres imprimíveis (letras maiúsculas e minúsculas, algarismose sinais de pontuação) ou de formatação (p.ex. fim-de-linha).

§ A codificação mais usada é a ASCII ou uma derivada desta (porexemplo, ISO-8859, UNICODE/UTF).

• Ficheiros binários§ A interpretação do seu conteúdo está a cargo do programa que o

utiliza; contêm bytes que não correspondem a caracteresimprimíveis.

§ Podem ser dados (inteiros, reais), programas (códigos máquina deum dado CPU), sons (segundo uma codificação como o MP3),imagens (codificadas num formato como o JPEG), filmes (noformato MPEG, por exemplo), etc.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 6

Page 7: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Ficheiro imprime.py

• O ficheiro imprime.py contém um programa na linguagem Python (queescreve mensagens no ecrã).

§ Mais precisamente, repete n vezes a palavra ´hello’ (mudando delinha no final de cada print)

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 7

def imprime ( n ):for i in range(n):

print( 'hello')

Page 8: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

imprime.py codificado em ASCII

d102

e101

f102

<sp>32

i105

m109

p112

r114

i105

m109

e101

(40

<sp>32

n110

<sp>32

)41

:58

<nl>10

<tab>9

f102

o111

r114

<sp>32

i105

<sp>32

i105

n110

<sp>32

r114

a97

n110

g103

e101

(40

<sp>32

n110

<sp>32

)41

<sp>32

:58

<nl>10

<tab>9

<tab>9

p112

r114

i105

n110

t116

(40

<sp>32

�39

h104

e101

l108

l108

o111

�39

)41

)41

<nl>10

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 8

def imprime ( n ):for i in range(n):

print( 'hello')

Page 9: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 9

Page 10: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sistema de ficheiros [1]

• O sistema de ficheiros está organizado hierarquicamente em forma deárvore (“inver=da”).§ Raiz (a diretoria do topo, da qual “descendem” as outras diretorias

e os outros ficheiros).§ C:\ Windows§ Ramos (as outras diretorias).§ Folhas (ficheiros).

• Cada diretoria (ou pasta) pode conter não só ficheiros como tambémoutras (sub-)diretorias.

• Nesta árvore, a é eficiente.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 10

Page 11: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sistema de ficheiros [2]

x.log

Raiz C:\ WindowsDiretoria Raiz

Diretoria Ficheiro

Programs Users

Python Office Luis

python.exe word.exe

ICE AM1

fact.py29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 11

teste1.pdfx.py

Page 12: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sistema de ficheiros [3]

• O caminho para o ficheiro (pathname) pode ser:

§ absoluto – o caminho completo a par=r da diretoria raiz;

§ rela=vo – o caminho a par=r da diretoria corrente.

• Nos caminhos, os nomes de subdiretorias e ficheiros são separadospor um carácter especial ( \ em Windows, / em macOS e Linux).

• Notações especiais (que podem ser usadas nos caminhos):

§ “.” representa a diretoria corrente;

§ “..” representa a diretoria pai da diretoria corrente.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 12

Page 13: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sistema de ficheiros [1]

x.log

Raiz C:\ WindowsDiretoria Raiz

Programs Users

Python Office Luis

python.exe

ICE AM1

fact.py29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 13

teste1.pdfx.py

Nome absoluto: C:\Users\Luis\ICE\fact.pyNome relativo. : ICE\fact.py

Diretoria corrente: C:\Users\Luis

Page 14: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 14

Page 15: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Ficheiros – Abertura … fecho

• Para ler ou escrever num ficheiro, é necessário começar por abrir oficheiro.

• À medida que se lê/escreve, a posição corrente avança.§ Acesso sequencial: Não se pode voltar para trás!

• No fim das leituras/escritas, é necessário fechar o ficheiro.

Posição corrente

Início Fim

Posição corrente após a leitura

Leitura de N bytes do ficheiro.Ao deslocamento corrente é somado N.

N

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 15

Page 16: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Abertura de um ficheiro

• A função (instrução)fich = open( nomeFicheiro, mode = ‘r’ )

abre um ficheiro com nome nomeFicheiro:• para leitura: com mode = ‘r’ (ou com omissão do mode); ou• para escrita (com mode = ‘w’)

• A função devolve um objeto que permite o acesso ao ficheiro.• Se o ficheiro não exisFr a execução lança um erro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 16

In : # abertura do ficheiro ‘notasAC.txt’ em modo de leituraIn : fichN = fopen(‘notasAC.txt’, ‘r’)In : # abertura do ficheiro ‘pautaAC.txt’ em modo de escritaIn : fichP = fopen(’pautaAC.txt’, ’w’)In : # abertura do ficheiro ‘texto.pdf’ que não existeIn : x = fopen(’texto.pdf’)FileNotFoundError: [Errno 2] No such file or directory:

'texto.pdf'

Page 17: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Fecho de um ficheiro

• A função (método)

fich.close()

permite fechar o ficheiro identificado pelo objeto fich, e deve serusado após a leitura ou escrita do ficheiro.

Se o objeto fich não existe é lançada uma mensagem de erro

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 17

In : # fecho do ficheiro aberto com identificador fichNIn : fichN.close()In : # fecho do ficheiro com identificador fichX não abertoIn : fichX.close()NameError: name 'fichX' is not defined

Page 18: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Memória central (RAM)

Escrita num ficheiro de texto

• Na escrita de um ficheiro, a informação guardada na memória central étransferida para o disco.

Zona de memóriacom N bytes

Disco

N bytes contíguos do

ficheiro

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 18

Page 19: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Escrita num ficheiro de texto

• A função (método) write escreve uma string num ficheiro de textofich.write( string )

§ Retorna o número de bytes escritos no ficheiro.

• Alguns caracteres especiais de formatação:§ \n mudança de linha§ \t tab

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 19

In : x = open(‘exemplo.txt’, ‘w’)In : x.write('esta é a primeira linha \n e esta a segunda\n')Out[12]: 45In : x.write(‘fim\n')Out[12]: 4In : x.close()

Page 20: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Memória central (RAM)

Leitura de um ficheiro [1]

• Na leitura de um ficheiro, a informação guardada no disco étransferida para a memória central.

• Só se podem ler dados se a posição corrente do ficheiro não es@verno fim do ficheiro.

Zona de memóriacom N bytes

Disco

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 20

N bytes contíguos do

ficheiro

Page 21: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Leitura de um ficheiro de Texto [1]

• A função (método)read()

lê todo o ficheiro (da posição corrente até ao fim) e retorna umastring com os caracteres lidos.• Uma leitura para além do final do ficheiro retorna a string vazia

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 21

In : a = open('exemplo.txt’)In : a.read()Out: 'esta é a primeira linha \n e esta é a segunda\nfim\n’In : a.read()Out: ’’In : a.close()

Page 22: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Leitura de um ficheiro de Texto [2]

• A função (método)

readlines()lê todo o ficheiro (da posição corrente até ao fim) e retorna uma listade strings, com os caracteres lidos.

• Uma leitura para além do final do ficheiro retorna a string vazia

• Nota: as mudanças de linha ficam nas strings

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 22

In : a = open('exemplo.txt’)In : a.readlines()Out: ['esta é a primeira linha \n', ' e esta é a segunda\n', 'fim\n’]In : a.readlines()Out: []In : a.close()

Page 23: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Leitura de um ficheiro de Texto [3]

• A função (método)

readline()lê uma linha do ficheiro até ao fim (a par?r da posição corrente) eretorna uma string, com os caracteres lidos.

• Uma leitura para além do final do ficheiro retorna a string vazia

• Nota: as mudanças de linha ficam na string

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 23

In : a = open('exemplo.txt’)In : a.readline()Out: 'esta é a primeira linha \n’In : a.readline()Out: ' e esta é a segunda\n’In : a.readline()Out: 'fim\n’In : a.close()

Page 24: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Leitura de um ficheiro de Texto [4]

• As várias funções podem ser utilizadas em conjunto.§ Notar a posição corrente!

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 24

In : a = open('exemplo.txt’)In : a.readline()Out: 'esta é a primeira linha \n’In : a.readlines()Out: [' e esta é a segunda\n’, 'fim\n’]In : a.readlines()Out: []In : a.read()Out: []In : a.close()

Page 25: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 25

Page 26: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Dividir uma String

• A função (método)split()

divide a string str pelo separador e devolve um vetor (lista) com cadauma das sub-strings.• Um separador é uma string, que não aparece nas sub-strings• Separadores usuais: ',', '; ', ' ', '\t'

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 26

In : s = '113 4.5 7.9 2019’In : s.split(' ')Out: ['113', '4.5', '7.9', '2019']In : t = '113; 4.5; 7.9; 2019'In : s.split(‘; ')Out: ['113', '4.5', '7.9', '2019']

Page 27: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Tipo de String

Outras funções permitem verificar o 8po de carateres de uma string.• para mais informação: help(str)

• isalnum()§ True if the string is an alpha-numeric string, False otherwise.§ A string is alpha-numeric if all characters in the string are alpha-numeric and there is at

least one character in the string.• isalpha()

§ True if the string is an alphabe8c string, False otherwise.§ A string is alphabe8c if all characters in the string are alphabe8c and there is at least one

character in the string.• isnumeric()

§ Return True if the string is a numeric string, False otherwise.§ A string is numeric if all characters in the string are numeric and there is at least one

character in the string.• isdecimal()

§ True if the string is a decimal string, False otherwise.§ A string is a decimal string if all characters in the string are decimal and there is at least

one character in the string.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 27

Page 28: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 28

Page 29: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Problema da Pauta de ICE [1]

• Faça um programa que produz a pauta com as notas finais de ICE

por avaliação con@nua, com os dados do ficheiro notasAC.txt.

• O ficheiro notasAC.txt tem uma linha por aluno, com a seguinte

informação:

• O número de aluno

• A nota do exercicio 1

• A nota do exercicio 2

• A nota do trabalho.

• A nota do teste 1

• A nota do teste 2.

• Os números, são separados por espaços.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 29

68322 15.5 16.4 18.0 15.7 14.8 ↵67413 12.3 9.2 9.4 8.7 7.2 ↵65064 8.0 4.5 7.2 8.1 10.2 ↵...

notasAC.txt

Page 30: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Problema da Pauta de ICE [1]

• A pauta é escrita no ficheiro pautaAC.txt.

§ O ficheiro terá uma primeira linha com 'Numero' e 'Nota Final’

tabelados (separados por tab).

§ Depois, terá mais uma linha por cada aluno, com o número e a

nota final por avaliação conMnua do aluno (no e notaFinal),

tabelados.

• A nota final de um aluno é:

§ Um inteiro entre 10 e 20, se o aluno aprovou, de acordo com as regras

de avaliação;

§ ‘AdmiUdo’, se o aluno tem frequência e reprovou;

§ ‘Excluído’, se o aluno não tem frequência.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 30

Page 31: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Problema [1]

1. Compreender totalmente o problema.• Os dados de entrada e de saída estão em ficheiros de texto:

notasAC.txt e pautaAC.txt.§ O símbolo ↵ representa o fim da linha e o símbolo → a tabulação.§ A nota da avaliação conDnua é obFda pela função

notaFinal(notasAC) que retorna um inteiro NF tal que« NF >= 10 se Aprovado« NF < 10 se Reprovado, mas obtendo frequência« NF = -1 se Reprovado , sem ter obFdo frequência

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 31

68322 15.5 16.4 18.0 15.7 14.8 ↵67413 12.3 9.2 9.4 8.7 7.2 ↵65064 8.0 4.5 7.2 8.1 10.2 ↵...

notasAC.txt Número�Nota Final↵68322�16 ↵67413�Admitido↵65064�Excluído↵…

PautaAC.txt

NF = 16NF = 8NF = -1

notaFinal

Page 32: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Problema [2]

2. Caracterizar o problema.• Problema: Pauta de ICE com ficheiros.• Entrada: (string) nomeFichNotas, (string) nomeFichPauta.• Saída: nenhuma. O ficheiro nomeFichPauta é criado e

escrito.

3. Generalizar o problema (sempre que for possível).• Não vamos generalizar este problema.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 32

Page 33: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Algoritmo [1]

4. Desenhar o algoritmo para resolver o problema.a) Conceber o algoritmo, decompondo o problema em sub-

problemas.• Como ler os dados do ficheiro nomeFichNotas e produzir o

ficheiro nomeFichPauta?1. Ler os dados do ficheiro nomeFichNotas e colocá-los numa

matriz (mNotas).2. Gerar a matriz mPauta a parNr da matriz mNotas.

« Usando a função notaFinal da aula teórica nº 4.3. Escrever os resultados no ficheiro nomeFichPauta a parNr da

matriz mPauta.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 33

Page 34: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Algoritmo [2]

b) Iden9ficar, caracterizar e generalizar cada sub-problema.• Problema: Leitura das notas (de avaliação conFnua).• Entrada: (string) nomeFichNotas.• Saída: matriz de números, com uma linha por aluno e

seis colunas (nº, E1, E2, P, T1, T2).

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 34

Page 35: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Algoritmo [3]

b) Iden9ficar, caracterizar e generalizar cada sub-problema.

• Problema: Pauta de ICE.

• Entrada: matriz de números, com uma linha por aluno e seis colunas (nº, E1, E2, P, T1, T2).

• Saída: matriz de números, com uma linha por aluno e duas colunas (nº e NF).

Nota: Já resolvido na aula nº 4, com a função pautaICEmPauta = pautaICE(mNotas)

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 35

Page 36: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Algoritmo [4]

b) Iden9ficar, caracterizar e generalizar cada sub-problema.

• Problema: Escrita da pauta.

• Entrada: (string) nomeFichPauta; matriz de números, com uma linha por aluno e duas colunas (nº e NF).

• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 36

Page 37: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Algoritmo [5]

c) Conceber o algoritmo, assumindo que os sub-problemasestão resolvidos.

• Pauta de ICE com ficheiros ( nomeFichNotas,nomeFichPauta ) :• mNnotas ← leNotas(nomeFichNotas).• mPauta ← pautaICE(mNotas).

• escrevePauta(nomeFichPauta, mPauta).

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 37

Page 38: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Algoritmo [6]

5. Para cada sub-problema, desenhar o algoritmo para oresolver.

• Leitura das notas: leNotas( nomeFichNotas )(leitura de ficheiro local)

• Pauta de ICE: pautaIce ( notasAC ) :(já feito na aula teórica nº 4)

• Escrita da pauta: escrevePauta ( nomeFichPauta, pauta )(escrita em ficheiro local)

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 38

Page 39: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Implementação – Que questões?

1. Como é que se lê de um ficheiro?§ No problema: leNotas.

2. Como é que se escreve num ficheiro?§ No problema: escrevePauta.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 39

Page 40: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função leNotas [1]

6. Para cada sub-problema (começando pelos mais simples), implementaro respeAvo algoritmo e testar o “sub-programa”.

• Problema: Leitura das notas (de avaliação conHnua).• Entrada: (string) nomeFichNotas.• Saída: matriz de números, com uma linha por aluno e seis colunas

(nº, E1, E2, P, T1, T2).

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 40

def leNotas( nomeFich ) :""" Lê os dados do ficheiro nomeFich para a matriz notas.O ficheiro nomeFich tem uma linha por aluno, com o número eas notas dos 2 exercícios, o projeto e dos 2 testes do aluno(numero, e1, e2, p, t1, e t2). Os números estão separadospor um espaço.A matriz notas tem a mesma informação: uma linha por alunocom (numero, e1, e2, p, t1, e t2)."""...

Page 41: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função leNotas [2]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 41

def leNotas( nomeFich ):""" ... """

notas = []

fich = open(nomeFich, 'r')

for line in fich.readlines():

ms = line.split(' ‘)

notasAluno = [float(n) for n in ms] # cria vetor de numeros reais

notas.append(notasAluno)

fich.close()

return notas

A matriz notas começa vazia poisnão se sabe o seu tamanho !

Page 42: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Regra de Programação

• O código deve ser eficiente.§ Os vetores e as matrizes devem ser criados com as

posições necessárias, para que não se escreva numaposição inexistente.

§ A única exceção à regra anterior é quando os dados vêmde ficheiro e não sabemos prever o seu número. AalternaGva seria percorrer o ficheiro duas vezes, o queseria ainda mais ineficiente.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 42

Page 43: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Programa [2]

6. Para cada sub-problema (começando pelos mais simples),implementar o respe@vo algoritmo e testar o “sub-programa”.

• Problema: Escrita da pauta.

• Entrada: (string) nomeFichPauta; matriz de números, com uma linha por aluno e duas colunas (nº e NF).

• Saída: nenhuma. O ficheiro nomeFichPauta é criado e escrito.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 43

Page 44: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função escrevePauta [1]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 44

def escrevePauta( nomeFich, pauta ) :""" Escreve a pauta no ficheiro nomeFich. A matriz pauta tem umalinha por aluno, com o número e a nota final do aluno. A nota final -1significa que o aluno não tem frequência.

O ficheiro nomeFich tem uma primeira linha com ‘Número' e 'NotaFinal', separados por um tab.

Depois, tem mais uma linha por cada aluno, como número e a nota final do aluno, separados por um tab. A nota finalé:

- Um inteiro entre 10 e 20, se o aluno aprovou;

- ‘AdmiYdo’, se o aluno tem frequência mas reprovou; e

- ‘Excluido’, se o aluno não tem frequência."""...

Page 45: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função escrevePauta [2]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 45

def escrevePauta( nomeFich, pauta ) :

""" ... """fich = open(nomeFich, 'w')fich.write('Número\tNota Final\n')for aluno in pauta :

numero = aluno[0]nota = aluno[1]if nota >= 10 :

fich.write(str(numero) + '\t' + str(nota) + '\n')elif nota >= 0 :

fich.write(str(numero) + '\tAdmitido\n’)else :

fich.write(str(numero) + '\tExcluído\n')fich.close()

Page 46: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Programa [3]

7. Implementar o algoritmo que resolve o problema e testar oprograma pedido.

• Problema: Pauta de ICE com ficheiros.• Entrada: nomeFichNotas, nomeFichPauta.• Saída: nenhuma. O ficheiro nomeFichPauta é criado e

escrito.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 46

Page 47: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função pautaICEFich [1]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 47

def pautaICEFich( nomeFichNotas, nomeFichPauta ):""" Produz a pauta de ICE por avaliação conRnua, com os dados do FicheironomeFichNotas. A pauta é escrita no ficheiro nomeFichPauta .O ficheiro nomeFichNotas tem uma linha por aluno, com o número e asnotas dos 2 exercícios, o projeto e dos 2 testes do aluno (numero, e1, e2, p,t1, e t2). Os números estão separados por um espaço.O ficheiro nomeFichPauta tem uma primeira linha com ‘Número' e 'NotaFinal', separados por um tab.Depois, tem mais uma linha por cada aluno, com o númeroe a nota final do aluno, separados por um tab. A nota final é:

- Um inteiro entre 10 e 20, se o aluno aprovou;- ‘Admi]do’, se o aluno tem frequência mas reprovou; e- ‘Excluido’, se o aluno não tem frequência.

"""...

Page 48: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função escrevePauta [2]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 48

def pautaICEFich( nomeFichNotas, nomeFichPauta ):""" ... """mNotas = leNotas(nomeFichNotas)mPauta = p.pautaICE(mNotas)escrevePauta(nomeFichPauta, mPauta);

• Esta função pode ser chamada para produzir a pauta

que permiMrá ler o ficheiro de saída (pautaAC.txt) como umficheiro de texto.

In : pautaICEFich(‘notasAC.txt’, ‘pautaAC.txt’)

Assume-se que a função pautaICE estádefinida num modulo importado como p!

Page 49: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Sumário

• Ficheiros.

§ Ficheiros de texto e binários.

§ Sistema de ficheiros.

§ Operações sobre ficheiros de texto.

• Strings.

§ Mais funções pre-definidas.

• Resolução dum problema.

• Gravar conteúdo de URL para ficheiro.

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 49

Page 50: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Problema da Pauta de ICE com URL

• Faça um programa que produz a pauta com as notas finais de ICE poravaliação con@nua, com os dados do ficheiro que se encontra “na net”num ficheiro com URL urlNotasAC.

• Este problema é semelhante ao anterior, mas requer um primeiropasso que é ler o conteúdo de um ficheiro na “net” para um ficheirolocal.

• Passo Inicial:§ Ler o conteúdo URL (dados)§ Abrir um ficheiro para escrita§ Escrever os dados no ficheiro§ Fechar ficheiro

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 50

Page 51: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Resolução – Função leURL [2]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 51

import requestsdef leURL( url, nomeFich):

""" ... """

req = requests.get(url)if req.ok :

fich = open( nomeFich, "w")fich.write(req.text)fich.close()

• Este passo é facilmente implementado com a função leURL• Em Python, para ler o conteúdo de um URL pode usar-se a função

§ get da biblioteca requests

Page 52: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

• A função é semelhante à função pautaICE vista atrás

• A função pode ser chamada para produzir a pauta

que permi=rá ler o ficheiro de saída (pautaACURL.txt)como um ficheiro de texto.

Resolução – Função escrevePauta [2]

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 52

def pautaICEURL( nomeURLNotas, nomeFichPauta ):

""" ... ""”

leURL(nomeURLNotas, "buffer.txt")

mNotas = leNotas("buffer.txt")

mPauta = p.pautaICE(mNotas)

escrevePauta(nomeFichPauta, mPauta);

In : url = ‘http://icec.ssdi.di.fct.unl.pt/notasAC_URL.txt’In : pautaICEURL( url, ‘pautaAC_URL.txt’)

Page 53: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1819/teoricas/T07/icec_t07.pdf · Sistema de ficheiros [2] x.log Raiz C:\ Windows Diretoria Raiz Diretoria

Para saber Mais

• Consultar um dos livros de texto aconselhados.

• Por exemplo:

§ “Think Python: How to Think Like a Computer ScienAst ”:

cap. 14.

§ “IntroducAon to ComputaAon and Programming Using Python”,

caps. 2.3, 4.6 e 5.4

29 Abril 2019 7: Sistemas de Ficheiros; Operações sobre ficheiros de texto 53