• Nenhum resultado encontrado

ICE-B Ficheiros. Ludwig Krippahl

N/A
N/A
Protected

Academic year: 2021

Share "ICE-B Ficheiros. Ludwig Krippahl"

Copied!
30
0
0

Texto

(1)

ICE-B

13 - Ficheiros

Ludwig Krippahl

(2)

Ficheiros

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

(3)

Ficheiros

Armazenamento não-volátil

(4)

Armazenamento

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

(5)

Armazenamento

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 identificador

Em Python, o caminho pode ser com /

(6)

Armazenamento

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

(7)

Armazenamento

Exemplo: disco rígido (HDD)

Um disco rígido tem várias superfícies magnetizáveis

Os bits são materializados no campo magnético induzido

Em clusters de sectors (e.g. cluster de 8 sectores de 512 bytes)

(8)

Armazenamento

■ O acesso ao disco é mais lento do que à RAM

• ~10ms "Seek" para a cabeça chegar à track

• ~2ms acesso para disco rodar até posição certa

• Transferência

■ Multiplicado por cada

"cluster"

• Mais lento se o disco estiver fragmentado

(9)

Ficheiro

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 ficheiro

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

(10)

Ficheiro

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

(11)

Ficheiro

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

(12)

Ficheiros

Acesso a ficheiros em Python

(13)

Ficheiros 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

■ Ficheiro

enzymes.txt

in_file = open('enzymes.txt') for line in in_file:

print(line)

in_file.close() EcoRI;GAATTC;G-AATTC

EcoRII;CCWGG;-CCWGG

(14)

Ficheiros 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

(15)

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

(16)

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

(17)

Ficheiros

Exemplo: digestão de ADN

(18)

Exemplo

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

(19)

Exemplo

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)

(20)

Exemplo

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

(21)

Exemplo

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 o

encaixe das várias funções.

(22)

Exemplo, 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...'), ...]

(23)

Exemplo, 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'),

(24)

Exemplo, 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']

(25)

Exemplo, 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

(26)

Exemplo, 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

(27)

Exemplo, 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

(EcoRII.txt) ID-0 1 ID-1 1

(BamHI.txt) ID-0 1 ID-1 1

(TaqI.txt) ID-0 3 ID-1 3

(28)

Ficheiros

Resumo

(29)

Ficheiros

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: Capítulo 9 do livro

(30)

Referências

Documentos relacionados

Toxicidade para órgãos-alvo específicos - exposição única: Mistura não é classificada para este perigo Toxicidade para órgãos-alvo específicos - exposição repetida: A

As dificuldades de controle de qualidade das preparações fitoterápicas utilizadas, a ausência de comprovações científicas de eficácia e segurança das plantas medicinais e

mas, caso não se sinta preparado, nem tente fazer isso...o nosso corpo astral sente de maneira muito mais intensa preparado, nem tente fazer isso...o nosso corpo astral sente de

Novos Ligantes Ácidos Selenínicos, Anidrido Selenínico e -Disselenóxido para Síntese de Complexos de Lantanídeos: Um Estudo Experimental e Teórico.. possível o uso do

As mortes por acidentes no trabalho são entendidas como a expressão máxima do desgaste do corpo e da saúde dos trabalhadores, submetidos a relações e a condições de

 Desenvolver nucleosídeos bicíclicos por meio da reação de nucleosídeos insaturados com dicloroceteno, gerado in situ a partir de cloreto de tricloroacetila

Dessa forma, objetivou-se com o presente estudo avaliar a influência de diferentes concentrações de nitrito sobre a sobrevivência, crescimento, consumo alimentar e resposta imune

De acordo com a especificação da curva de Phillips utilizada pelo Banco Central em seu processo decisório, pressupõe-se que todos os preços da economia são reajustados em função