Upload
others
View
15
Download
0
Embed Size (px)
Citation preview
ICE-BICE-BICE-BICE-BICE-BICE-BICE-BICE-BICE-B
13 - Ficheiros13 - Ficheiros13 - Ficheiros13 - Ficheiros13 - Ficheiros13 - Ficheiros13 - Ficheiros13 - Ficheiros13 - Ficheiros
Ludwig Krippahl
1
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
Resumo■ Organização de um disco.• Sistema de ficheiros.• Ficheiros de texto e binários.
■ Operações sobre ficheiros de texto.• Simulação de digestão enzimática de ADN
■ Primeiro teste
2
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
Armazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátilArmazenamento não-volátil
3
ArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamento
Armazenamento não-volátil■ A memória RAM é volátil• Rápida mas, sem alimentação, os dados perdem-se
■ No armazenamento não-volátil os dados persistem• Disco rígido, SSD, pendisk, cartão de memória, ...
Organização dos ficheiros■ No suporte, os ficheiros estão organizados em blocos de bytes■ O hardware gere o acesso a esses blocos■ O Sistema Operativo gere a organização desses blocos■ O OS identifica cada ficheiro por um identificador único:• /home/user/Documents/ICE-B-1718-2/Lectures/13-files.html
• C:\Documents\ICE-B-1718-2\Lectures\13-files.html
4
ArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamento
Sistema de ficheiros■ O OS identifica cada ficheiro por um identificador único:• /home/user/Documents/ICE-B-1718-2/Lectures/13-files.html
• C:\Documents\ICE-B-1718-2\Lectures\13-files.html
■ O identificador do ficheiro é composto por:• Caminho (directoria) onde está o ficheiro• Nome do ficheiro
■ Não pode haver dois ficheiros com mesmo identificadorEm Python, o caminho pode ser com /■ O carácter \ é usado em strings para caracteres especiais
5
ArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamento
Sistema de ficheiros■ O caminho para o ficheiro pode ser absoluto, a partir da raiz• /home/user/Documents/ICE-B-1718-2/Lectures/13-files.html
• C:\Documents\ICE-B-1718-2\Lectures\13-files.html
■ ou relativo:• Pasta sob a pasta corrente: data/file.txt• Pasta "acima" da pasta corrente: ../file.txt• Pasta "ao lado" da pasta corrente: ../folder/file.txt
6
ArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamento
Exemplo: disco rígido (HDD)Um disco rígido tem várias superfíciesmagnetizáveisOs bits são materializados no campomagnético induzidoEm clusters de sectors (e.g. cluster de8 sectores de 512 bytes)
7
ArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamentoArmazenamento
■ O acesso ao disco é maislento do que à RAM
• ~10ms "Seek" para a cabeçachegar à track
• ~2ms acesso para disco rodar atéposição certa
• Transferência
■ Multiplicado por cada"cluster"
• Mais lento se o disco estiverfragmentado
8
FicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiro
Um ficheiro é uma sequência de bytes■ Independentemente de como o hardware os armazena■ Cada byte é um valor de 0 a 255■ Independentemente do tipo de ficheiroTodos os ficheiros são sequências de bytes■ O que determina o "tipo" de ficheiro é apenas a forma de interpretar
esses números• Texto, som, imagem, vídeo, etc...
9
FicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiro
■ Um ficheiro é uma sequência de bytes• Informação no ficheiro (hexadecimal, 00-ff), codificado com UTF-8
Slide:Ficheiros
h3:Resumo
Organização de um disco.
Sistema de ficheiros.
Ficheiros de texto e binários.
Operações sobre ficheiros de texto.
Simulação de digestão enzimática de ADN
00000000 53 6c 69 64 65 3a 46 69 63 68 65 69 72 6f 73 0a |Slide:Ficheiros.|
00000010 20 68 33 3a 52 65 73 75 6d 6f 0a 20 4f 72 67 61 | h3:Resumo. Orga|
00000020 6e 69 7a 61 c3 a7 c3 a3 6f 20 64 65 20 75 6d 20 |niza....o de um |
00000030 64 69 73 63 6f 2e 0a 20 20 53 69 73 74 65 6d 61 |disco.. Sistema|
00000040 20 64 65 20 66 69 63 68 65 69 72 6f 73 2e 0a 20 | de ficheiros.. |
00000050 20 46 69 63 68 65 69 72 6f 73 20 64 65 20 74 65 | Ficheiros de te|
00000060 78 74 6f 20 65 20 62 69 6e c3 a1 72 69 6f 73 2e |xto e bin..rios.|
00000070 0a 20 4f 70 65 72 61 c3 a7 c3 b5 65 73 20 73 6f |. Opera....es so|
00000080 62 72 65 20 66 69 63 68 65 69 72 6f 73 20 64 65 |bre ficheiros de|
00000090 20 74 65 78 74 6f 2e 0a 20 20 53 69 6d 75 6c 61 | texto.. Simula|
000000a0 c3 a7 c3 a3 6f 20 64 65 20 64 69 67 65 73 74 c3 |....o de digest.|
000000b0 a3 6f 20 65 6e 7a 69 6d c3 a1 74 69 63 61 20 64 |.o enzim..tica d|
000000c0 65 20 41 44 4e 0a |e ADN.|
10
FicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiroFicheiro
■ Um ficheiro é uma sequência de bytes• Informação no ficheiro (hexadecimal, 00-ff), codificação própria (.wav)
RIFF4�iWAVEfmt @ � � fact data�i �� �x��)��s� �) 2� �I �e������
0b �"� �*!$#���(�'�����0�)�A �� ' �� �8%� ˭" 2'���Y �A��
00000000 52 49 46 46 34 9a 69 00 57 41 56 45 66 6d 74 20 |RIFF4.i.WAVEfmt |
00000010 14 00 00 00 11 00 01 00 40 1f 00 00 bb 0f 00 00 |........@.......|
00000020 00 02 04 00 02 00 f9 03 66 61 63 74 04 00 00 00 |........fact....|
00000030 00 00 00 00 64 61 74 61 00 9a 69 00 08 00 00 00 |....data..i.....|
00000040 9f f7 04 ff 78 83 80 29 a2 ba 73 dc 10 ba 29 12 |....x..)..s...).|
00000050 11 32 cb 12 bc 49 04 aa 65 b1 8a c1 9b 8a 8a 04 |.2...I..e.......|
00000060 30 62 15 98 22 b8 0b f0 2a 21 24 23 89 f0 ad 28 |0b.."...*!$#...(|
00000070 c8 0a 27 88 88 b8 99 9c 30 85 29 00 e8 41 02 0a |..'.....0.)..A..|
00000080 02 f8 8a 08 10 27 10 99 d9 0b 81 38 25 a0 01 cb |.....'.....8%...|
00000090 ad 22 0a 32 27 aa ba 00 e9 59 14 88 41 93 9b 0a |.".2'....Y..A...|
11
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
Acesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em PythonAcesso a ficheiros em Python
12
Ficheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de texto
Ler e escrever ficheiros de texto em Python■ A função open(file, mode='r') recebe o nome do ficheiro■ Devolve um objecto que permite o acesso ao ficheiro.• Omitindo mode, o acesso é para leitura• O objecto pode ser usado como iterador, linha a linha• Devemos usar close para libertar o ficheiro
■ Ficheiroenzymes.txt
in_file = open('enzymes.txt') for line in in_file: print(line) in_file.close()
EcoRI;GAATTC;G-AATTC EcoRII;CCWGG;-CCWGG BamHI;GGATCC;G-GATCC TaqI;TCGA;T-CGA Sau3AI;GATC;-GATC AluI;AGCT;AG-CT
EcoRI;GAATTC;G-AATTC
EcoRII;CCWGG;-CCWGG
BamHI;GGATCC;G-GATCC
TaqI;TCGA;T-CGA
Sau3AI;GATC;-GATC
AluI;AGCT;AG-CT
13
Ficheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de texto
Ler e escrever ficheiros de texto em Python■ Se o ficheiro cabe em memória é mais prático readlines• O interpretador liberta o ficheiro quando apaga o objecto da memória• Nota: as strings na lista mantém o terminador de linha
lines = open('enzymes.txt').readlines() print(lines)
['EcoRI;GAATTC;G-AATTC\n', 'EcoRII;CCWGG;-CCWGG\n', 'BamHI;GGATCC;G-GATCC\n', 'TaqI;TCGA;T-CGA\n', 'Sau3AI;GATC;-GATC\n', 'AluI;AGCT;AG-CT']
EcoRI;GAATTC;G-AATTC
EcoRII;CCWGG;-CCWGG
BamHI;GGATCC;G-GATCC
TaqI;TCGA;T-CGA
Sau3AI;GATC;-GATC
AluI;AGCT;AG-CT
14
Ficheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de textoFicheiros de texto
Ler e escrever ficheiros de texto em Python■ Para escrever um ficheiro de texto, abrir em modo 'w'■ Nota: é preciso incluir a indicação de mudança de linha• Os ficheiros são sequências de bytes.• O byte 10 (ou 13+10 em Windows) é que indica mudança de linha.• O interpretador converte \n no código adequado.
out_file = open('test.txt','w') out_file.write('some text') out_file.write('some more text\n') out_file.write('some more text \n with a new line') out_file.close()
some textsome more text
some more text
with a new line
15
Ficheiros bináriosFicheiros bináriosFicheiros bináriosFicheiros bináriosFicheiros bináriosFicheiros bináriosFicheiros bináriosFicheiros bináriosFicheiros binários
Ficheiros binários em Python■ Leitura: open(nome,'rb')■ Escrita: open(nome,'wb')■ A diferença é que não se assume que possa ser lido linha a linha
ou convertido em string■ Não vamos lidar com estes ficheiros em ICE• Excepto usando bibliotecas adequadas (e.g. ler imagens)
16
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
Exemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADNExemplo: digestão de ADN
17
ExemploExemploExemploExemploExemploExemploExemploExemploExemplo
Simular a digestão de ADN■ Ficheiro sequences.txt com sequências:
ID-00:TGGACTTTGTTTGCACCGGGGCGCGAGTCGTACACCTATCTTGAGATGCAACTGA...
ID-01:CGGGGGACGCATCAGTTATGTTCGCTAAGACGAACTACAGTAACCGCTATATCCG...
ID-02:CCGATTAGACGCGGAAGCACACATAGAGAGCGTATCTTACTCTAGTTGTTGCCAA...
...
■ Ficheiro enzymes.txt com informação sobre enzimas
EcoRI;GAATTC;G-AATTC
EcoRII;CCWGG;-CCWGG
...
■ Objectivo: criar um ficheiro para cada enzima com:• Identificador da sequência, número de fragmentos
■ Ficheiros: EcoRI.txt, EcoRII.txt, BamHI.txt, ...
18
ExemploExemploExemploExemploExemploExemploExemploExemploExemplo
Plano do programa■ Ler sequências para lista de tuplos, identificador e sequência■ Ler enzimas para lista de tuplos: id, reconhecimento, corte■ Digerir uma sequência com uma enzima■ Gravar um ficheiro, para uma enzima■ Gravar para todas as enzimas (função final, junta tudo)
19
ExemploExemploExemploExemploExemploExemploExemploExemploExemplo
Plano do programa■ Ler sequências para lista de tuplos, identificador e sequência
def read_sequences(seq_file): """Read sequences file to list of tuples (id,sequence)"""
■ Ler enzimas para lista de tuplos: id, reconhecimento, corte
def read_enzymes(file_name): """Read enzyme data to list of tuples (id, recon,cut)"""
■ Digerir sequência:
def fragments(sequence,recon,cut): """Return a list of fragments from cutting the sequence"""
20
ExemploExemploExemploExemploExemploExemploExemploExemploExemplo
Plano do programa■ Gravar um ficheiro, para uma enzima
def create_report(file_name,sequences,recon,cut): """Create report with number of fragments for one enzyme"""
■ Gravar para todas as enzimas (função final, junta tudo)
def create_all_reports(seq_file,enz_file): """Create one report file per enzyme, name.txt"""
■ Importante pensar primeiro no problema, decompor e planear oencaixe das várias funções.
■ O objectivo é podermos depois implementar cada função sem terde pensar em tudo
21
Exemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementação
■ Ler ficheiro das sequências• Nota: strip para tirar espaços e mudança de linha no final da string
def read_sequences(seq_file): "Read sequences file to list of tuples (id,sequence)" sequences = [] seq_lines = open(seq_file).readlines() for sl in seq_lines: sid,seq = sl.split(':') sequences.append( (sid,seq.strip()) ) return sequences
In : seqs = read_sequences('sequences.txt') In : seqs Out: [('ID-00', 'TGGACT...'), ('ID-01', 'CGGGGG...'), ...]
22
Exemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementação
■ Ler ficheiro com os dados das enzimas
def read_enzymes(file_name): """Read enzyme data to list of tuples (id, recon,cut)""" enzymes = [] lines = open(file_name).readlines() for el in lines: e_id,recon,cut = el.split(';') enzymes.append( (e_id, recon, cut.strip()) ) return enzymes
In : enzymes = read_enzymes('enzymes.txt') Out : [('EcoRI', 'GAATTC', 'G-AATTC'), ('EcoRII', 'CCWGG', '-CCWGG'), ('BamHI', 'GGATCC', 'G-GATCC'), ('TaqI', 'TCGA', 'T-CGA'), ('Sau3AI', 'GATC', '-GATC'), ('AluI', 'AGCT', 'AG-CT')]
23
Exemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementação
■ Digerir uma sequência com uma enzima
def fragments(sequence,recon,cut): """Return a list of fragments from cutting the sequence""" marked = sequence.replace(recon,cut) return marked.split('-')
In : fragments('ACTTATTCTG','TT','T-T') Out: ['ACT', 'TAT', 'TCTG']
24
Exemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementação
■ Criar ficheiro com relatório para uma enzima
def create_report(file_name,sequences,recon,cut): """Create report with number of fragments for one enzyme""" ofil = open(file_name,'w') for seq_record in sequences: seq_id,seq = seq_record frags = fragments(seq,recon,cut) ofil.write('{0}\t{1}\n'.format(seq_id, len(frags)) ) ofil.close()
■ Nota 1: não é preciso return (não devolve valor)■ Nota 2: escrita formatada• O método format permite usar uma string de formatação
• As partes {num} indicam onde pôr os argumentos do format, convertidos parastring
25
Exemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementação
■ Criar ficheiro com relatório para uma enzima
def create_report(file_name,sequences,recon,cut): """Create report with number of fragments for one enzyme""" ofil = open(file_name,'w') for seq_record in sequences: seq_id,seq = seq_record frags = fragments(seq,recon,cut) ofil.write('{0}\t{1}\n'.format(seq_id, len(frags)) ) ofil.close()
In : sequences = [('s1','ATTA'),('s2','ATTCTTA'),('s3','ACTTATTCTG')] In : create_report('test.txt',sequences,'TT','T-T') In : print(open('test.txt').read()) s1 2 s2 3 s3 3
print(open(ficheiro).read())
■ Imprime o conteúdo do ficheiro lido como uma única string
26
Exemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementaçãoExemplo, implementação
■ Função final, todos os relatórios
def create_all_reports(seq_file,enz_file): """Create one report file per enzyme, name.txt""" sequences = read_sequences(seq_file) enzymes = read_enzymes(enz_file) for enzyme in enzymes: enz_id,recon,cut = enzyme create_report(enz_id+'.txt',sequences,recon,cut)
In : create_all_reports('sequences.txt','enzymes.txt')
(EcoRI.txt)
ID-0 2
ID-1 1
ID-2 1
ID-3 1
ID-4 1
ID-5 1
...
(EcoRII.txt)
ID-0 1
ID-1 1
ID-2 1
ID-3 1
ID-4 1
ID-5 1
...
(BamHI.txt)
ID-0 1
ID-1 1
ID-2 1
ID-3 1
ID-4 1
ID-5 1
...
(TaqI.txt)
ID-0 3
ID-1 3
ID-2 4
ID-3 3
ID-4 3
ID-5 3
...
27
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
AvaliaçõesAvaliaçõesAvaliaçõesAvaliaçõesAvaliaçõesAvaliaçõesAvaliaçõesAvaliaçõesAvaliações
28
Avaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICE
Trabalhos■ O que já está planeado, mesmas datas e regras de avaliaçãoTestes■ O que está planeado, excepto alguma incerteza acerca da data do
segundo teste■ Mas o primeiro será no dia 28, como previsto, às■ Nota: dia 28 é uma terça-feira que é sexta-feira na FCT
29
Avaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICE
Testes■ Os testes serão online• Problema: alunos partilharem as respostas
■ Perguntas com tempo limitado■ Perguntas individualizadas (usar o login do CLIP)■ A resposta é enviada por e-mail■ Só podem usar o vosso e-mail oficial da FCTEnsaio para o teste■ Estará disponível esta semana
30
Avaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICEAvaliações ICE
Detecção de fraude■ Problema: trabalhos ou testes não serem feitos pelo aluno■ Ainda estamos a pensar na solução (isto não é definitivo)• Mas pode incluir video-chamadas com uma amostra de alunos ou algo semelhante
• Só para detectar fraude (não é defesa de nota para avaliação)
■ Há muita incerteza ainda acerca disto■ Quando tivermos o plano formulado avisamos
31
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
ResumoResumoResumoResumoResumoResumoResumoResumoResumo
32
FicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheirosFicheiros
Resumo■ Ficheiros: sequência de bytes identificada por caminho + nome■ Ficheiros em Python: open■ Leitura e escrita de ficheiros• Não esquecer o close() se o objecto ficar guardado
Leitura adicional:■ Recomendada: Capítulo 13 dos apontamentos■ Opcional: Secções 14.1 e 14.2 do livro