Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Informática para as Ciências e EngenhariasVersão : C
(Engenharia Civil)Aula 7
Pedro Barahona2018 / 19
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
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
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
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
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
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')
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')
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
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
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
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
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
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
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
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'
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
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
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()
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
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()
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()
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()
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()
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
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']
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
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
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
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
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
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
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
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
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
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
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
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
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
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)."""...
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 !
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
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
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."""...
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()
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
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.
"""...
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!
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
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
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
• 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’)
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