Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ficheiros
Theyre putting down their names, the Gryphon whispered in reply, for fear they forget them before the end of
the trial.
Lewis Carroll, Alices Adventures in Wonderland
captulo, os elementos s
ao acedidos sequencialmente, ou seja, para aceder ao
n-esimo elemento do ficheiro, teremos primeiro de aceder aos n
que se encontram antes dele.
1 Em
ingl
es, file.
161
1 elementos
CAPITULO 6. FICHEIROS
162
6.1
O tipo ficheiro
Sendo os ficheiros entidades que existem fora do nosso programa, antes de utilizar um ficheiro e necess
ario identificar qual a localizac
ao fsica deste e o modo
como o queremos utilizar, ou seja se queremos ler a informac
ao contida no ficheiro ou se queremos escrever informac
ao no ficheiro.
A operac
ao atraves da qual identificamos a localizac
ao do ficheiro e o modo
como o queremos utilizar e conhecida por operac
ao de abertura do ficheiro e e
realizada em Python recorrendo `
a func
ao embutida open. A func
ao open tem a
seguinte sintaxe:
open(hexpressaoi, hmodoi{, encoding = htipoi})
Esta func
ao tem dois argumentos obrigat
orios e um opcional:
o primeiro argumento, representado por hexpressaoi, e uma express
ao cujo
163
6.2
Leitura de ficheiros
CAPITULO 6. FICHEIROS
164
E
\n
165
\n
166
CAPITULO 6. FICHEIROS
>>> t.close()
A seguinte interacc
ao mostra a utilizac
ao das func
oes disponveis para ler ficheiros, indicando o comportamento de cada uma delas ao serem avaliadas com
situac
oes diferentes relativas ao indicador de leitura.
>>> f = open(teste.txt, r, encoding = UTF-16)
>>> l1 = f.readline()
>>> l1
Este
e um teste\n
>>> l2 = f.read()
>>> l2
que mostra como o Python\nl^
e ficheiros de caracteres\n
>>> print(l2)
que mostra como o Python
l^
e ficheiros de caracteres
>>> f.close()
>>> g = open(teste.txt, r, encoding = UTF-16)
>>> lines = g.readlines()
>>> lines
[Este
e um teste\n, que mostra como o Python\n,
l^
e ficheiros de caracteres\n]
167
CAPITULO 6. FICHEIROS
168
6.3
Escrita em ficheiros
posic
ao do indicador de escrita, a hcadeia de caracteresi no ficheiro hfichi.
O indicador de escrita e movimentado para a posic
ao imediatamente a
seguir `
a cadeia de caracteres escrita. Esta func
ao devolve o n
umero de
caracteres escritos no ficheiro;
posic
ao imediatamente a seguir `
au
ltima cadeia de caracteres escrita. Esta
func
ao n
ao devolve nenhum valor;
3. hfichi.close(). Esta func
ao fecha o ficheiro hfichi.
A seguinte interacc
ao mostra a utilizac
ao de operac
oes de escrita e de leitura
num ficheiro. Poder
a parecer estranho a n
ao utilizac
ao da indicac
ao sobre a
codificac
ao dos caracteres utilizada no ficheiro. Contudo, como os ficheiros
utilizados s
ao criados pelo Python, a n
ao indicac
ao da codificac
ao significa que
esta ser
a a codificac
ao usada por omiss
ao pelo Python.
169
>>> f1 = open(teste1, w)
>>> f1.write(abc)
3
>>> f1.write(def)
3
>>> f1.close()
>>> f1 = open(teste1, r) # teste1
e aberto para leitura
>>> cont = f1.read()
>>> print(cont)
>>> abcdef
>>> cont # inspec
c~
ao do conte
udo do ficheiro f1
abcdef
>>> f1.close()
>>> # teste1 (j
a existente)
e aberto para escrita
>>> f1 = open(teste1, w)
>>> f1.close()
>>> f1 = open(teste1, r) # teste1
e aberto para leitura
>>> cont = f1.read()
>>> cont # o conte
udo do ficheiro foi apagado
>>> f1.close()
A interacc
ao anterior mostra que se um ficheiro existente e aberto para escrita,
o seu conte
udo e apagado com a operac
ao de abertura do ficheiro.
Apos a abertura de um ficheiro para escrita, e tambem possvel utilizar a func
ao
print apresentada na Secc
ao 2.5.2, a qual, na realidade, tem uma sintaxe definida pelas seguintes express
oes em notac
ao BNF:
hescrita de dadosi ::= print()
print(hexpress
oesi, file = hnome de ficheiroi)
hnome de ficheiroi ::= hnomei
Para as duas novas alternativas aqui apresentadas, a sem
antica desta func
ao e
definida do seguinte modo: ao encontrar a invocac
ao da func
ao print(file =
hnomei), o Python escreve uma linha em branco no ficheiro hnomei; ao encontrar
CAPITULO 6. FICHEIROS
170
a invocac
ao da func
ao print(hexp1 i, ... hexpn i, file = hnomei), o Python
avalia cada uma das express
oes hexp1 i . . . hexpn i, escrevendo-as na mesma linha
do ficheiro hnomei, separadas por um espaco em branco e terminando com um
salto de linha.
A seguinte interacc
ao mostra a utilizac
ao da func
ao print utilizando nomes de
ficheiros:
>>> f1 = open(teste1, w)
# teste1
e aberto para escrita
>>> f1.write(abc)
3
>>> print(cde, file = f1)
>>> print(fgh, 5, 5 * 5, file = f1)
>>> print(ijk, file = f1)
>>> f1.close()
>>> f1 = open(teste1, r)
# teste1
e aberto para leitura
# conte
udo de teste1
abccde\nfgh 5 25\nijk\n
>>> print(cont)
abccde
fgh 5 25
ijk
>>> f1.close()
>>> f1 = open(teste1, a) # teste1
e aberto para adi
c~
ao
>>> print(file = f1)
>>> print(file = f1)
>>> f1.write(lmn)
3
>>> f1.close()
>>> f1 = open(teste1, r)
# teste1
e aberto para leitura
# conte
udo de teste1
abccde\nfgh 5 25\nijk\n\n\nlmn
>>> print(cont)
abccde
171
fgh 5 25
ijk
lmn
>>> f1.close()
6.4
Notas finais
Apresent
amos o conceito de ficheiro, considerando apenas ficheiros de texto.
Um ficheiro corresponde a uma entidade que existe no computador independentemente da execuc
ao de um programa.
Para utilizar um ficheiro e necess
ario abrir o ficheiro, ou seja, associar uma
entidade do nosso programa com um ficheiro fsico existente no computador
ou na rede a que o computador est
a ligado e dizer qual o tipo de operac
oes a
efectuar no ficheiro, a leitura ou a escrita de informac
ao.
Depois de aberto um ficheiro apenas e possvel efectuar operac
oes de leitura ou
de escrita, dependendo do modo como este foi aberto.
6.5
Exerccios
conta_vogais(testevogais.txt, restestavogais.txt)
poder
a dar origem ao ficheiro:
a 41
e 45
i 18
CAPITULO 6. FICHEIROS
172
o 26
u 20
6.5. EXERCICIOS
173
$ nl
Este comando faz com que o texto comece numa nova linha, ou seja,
origina uma nova linha no ficheiro de destino.
$ es hni
Este comando faz com que o espacamento entre as linhas do texto passe
a ser de hni linhas em branco (o smbolo n
ao terminal hni corresponde
a um inteiro positivo).
$ sp hni
Depois da execuc
ao deste comando, a margem da esquerda passa a
comecar na coluna correspondente ao smbolo n
ao terminal hni. Se
CAPITULO 6. FICHEIROS
174
$ md hni
Depois da execuc
ao deste comando, a margem da direita passa a acabar
na coluna correspondente ao smbolo n
ao terminal hni. Se o valor de
erro de execuc
ao e este comando e ignorado (o smbolo n
ao terminal
hni corresponde a um inteiro positivo).
$ pa
A execuc
ao deste comando causa um salto de p
agina, excepto se, quando
ele for executado, o formatador de texto se encontrar no incio de uma
p
agina.
Sugest
ao: Utilize uma cadeia de caracteres para armazenar a linha que
est
a a ser gerada para o ficheiro de destino. O seu programa deve ler
palavras do ficheiro fonte e decidir se estas cabem ou n
ao na linha a ser
gerada. Em caso afirmativo, estas s
ao adicionadas `
a linha a ser gerada,
em caso contr
ario a linha e escrita no ficheiro de destino, eventualmente
depois de algum processamento.