Dicionários e Arquivos

Propaganda
DICIONÁRIOS E ARQUIVOS
George Gomes Cabral
DICIONÁRIOS
Em conjunto com listas, são os tipos de dados
internos mais flexíveis no Python.
Dados acessados pela chave (key), ao contrário de
listas, onde os dados são acessados pela posição
(índice).
Também chamados de arrays associativos ou tabelas
hash.
Têm comprimento variável, são heterogêneos e
podem ser aninhados arbitrariamente.
DICIONÁRIOS
São delimitados por : {}.
Lista de pares chave valor
Exemplos:
tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127
print tel
tel['irv'] = 4127
print tel
tel['irv'] = 1234
print tel
del tel['sape']
print tel
a = tel.keys()
print a
b = tel.has_key('guido')
print b
c = tel.has_key('amanda')
print c
DICIONÁRIOS
Mais exemplos:
D1 = {} # dicionario vazio
D2 = {'spam' : 2, 'eggs' : 3} # dicionario de tamanho = 2
D3 = {'food': {'ham': 1, 'egg': 2}} # aninhado
print D3['food']
print D3['food']['ham']
print D2.has_key('eggs')
print 'eggs' in D2
print "keys", D2.keys()
print "values", D2.values()
print D2
D2.get('eggs')
D2.update(D3)
print D2
print len(D2)
del D2['eggs']
print D2
MATRIZES COM DICIONÁRIOS
Matrix = {}
Matrix[(2,3,4)] = 88
Matrix[(7,8,9)] = 99
...
Inicializando uma matriz:
m1 = {}
i, j = 3, 2
for a in range(0,i):
for b in range(0,j):
m1[(a,b)] = 0
DICIONÁRIOS
Exercício:
1 - Fazer um programa que calcule e exiba a
soma de duas matrizes.
MATRIZES (SOMA)
m1 = {}
m2 = {}
mRes = {}
i, j = 2, 2
l, k = 2, 2
m1[(0,0)] = 1
m1[(0,1)] = 3
m1[(1,0)] = 2
m1[(1,1)] = 0
m2[(0,0)] = 1
m2[(0,1)] = 3
m2[(1,0)] = 2
m2[(1,1)] = 0
for a in range(0,i):
for b in range(0,j):
mRes[(a,b)] = m1[(a,b)] + m2[(a,b)]
print mRes
DICIONÁRIOS
Exercício:
1 - Fazer um programa que calcule e exiba a
multiplicação de duas matrizes.
MATRIZES (MULTIPLICAÇÃO)
m1 = {}
m2 = {}
mRes = {}
i, j = 3, 2
m1[(0,0)] = 1
m1[(0,1)] = 3
m1[(1,0)] = 2
m1[(1,1)] = 0
m1[(2,0)] = -1
m1[(2,1)] = 4
m2[(0,0)] = 2
m2[(0,1)] = 1
m2[(1,0)] = 3
m2[(1,1)] = 1
for a in range(0,i):
for b in range(0,j):
mRes[(a,b)] = 0
temp = 0
for a in range(0,i):
coluna = 0
for b in range(0,j):
coluna += 1
for c in range(0,j):
mRes[(a,b)] += m1[(a,c)] * m2[(c,coluna-1)]
print mRes
Arquivos
ARQUIVOS
o Opções do Open: (“r” - abrir para entrada, “w” – criar e abrir para saída, “a” – abrir
para anexar no final)
operação
Interpretação
output = open(“c:/teste.txt”,”w”)
Cria arquivo de saída (“w” significa gravação)
input = open(“c:/teste.txt”,”r”)
Cria arquivo de entrada (“r” significa leitura)
S = input.read()
Lê o arquivo inteiro em uma única string
S = input.read(N)
Lê N byte (1 ou mais)
S = input.readline()
Lê a próxima linha
L = input.readlines()
Cria uma lista onde cada elemento é uma
linha do arquivo
output.write(S)
Grava a string S no arquivo
output.writelines(L)
Grava no arquivo todas as strings da lista L
output.close()
Fechamento manual do arquivo
ARQUIVOS - LEITURA
Exemplo – lendo o arquivo inteiro em uma única
String. Deve existir um arquivo com conteúdo
chamado teste_python.txt localizado em C:
arquivo = open("c:\teste_python.txt","r")
conteudo = arquivo.read()
print conteudo
ARQUIVOS - LEITURA
Exemplo – lendo linha por linha de um arquivo. Deve existir
um arquivo com conteúdo chamado teste_python.txt localizado
em C:
arquivo = open("c:\teste_python.txt","r")
conteudo = arquivo.readline()
print conteudo
conteudo = arquivo.readline()
print conteudo
Obs. a cada chamada ao método readline() o objeto arquivo
terá uma linha a menos. Dessa forma, se quisermos acessar a
primeira linha novamente depois de já termos executado o
método readline() temos duas opções:
Guardar seu conteúdo em uma variável ou em uma lista de strings
para a necessidade de um acesso futuro a esse valor.
Abrir novamente o arquivo e executar novamente o readline
ARQUIVOS - LEITURA
Exemplo – lendo os N primeiros caracteres de um
arquivo. Deve existir um arquivo com conteúdo
chamado teste_python.txt localizado em C:
arquivo = open("c:\teste_python.txt","r")
N = 15
conteudo = arquivo.read (N)
print conteudo
ARQUIVOS - LEITURA
Exemplo – lendo todas as linhas de um arquivo e
as armazenando em uma lista. Deve existir um
arquivo com conteúdo chamado teste_python.txt
localizado em C:
arquivo = open("c:\teste_python.txt","r")
conteudo = arquivo.readlines()
print conteudo
#conteudo é uma lista onde
#cada elemento dessa lista é
#uma linha do arquivo
ARQUIVOS - GRAVAÇÃO
Exemplo – gravando uma String em um arquivo.
Se já houver algum conteúdo nesse arquivo esse
conteúdo será perdido.
arquivo = open("c:\teste_python2.txt",“w")
conteudo = “ser ou não ser, eis a questão”
arquivo.write(conteudo)
Obs. se quisermos gravar o conteúdo no final do
arquivo devemos mudar a opção de abertura do
arquivo (na primeira linha de código) de “w” para
“a”.
ARQUIVOS - GRAVAÇÃO
Exemplo – gravando uma lista de Strings em um
arquivo. Se já houver algum conteúdo nesse
arquivo esse conteúdo será perdido.
arquivo = open("c:\teste_python2.txt",“w")
conteudo = “ser ou não ser, eis a questão”
arquivo.write(conteudo)
Obs. se quisermos gravar o conteúdo no final do
arquivo devemos mudar a opção de abertura do
arquivo (na primeira linha de código) de “w” para
“a”.
TRATAMENTO DE STRINGS
Se quisermos gravar um arquivo onde cada String se
localize em uma linha diferente, devemos
manualmente inserir o símbolo de quebra de linha.
Por exemplo:
“ser ou não ser,\neis a questão”
O símbolo “\n” indica que a string eis a questão deve ser
escrita em outra linha.
Função rsplit()
Gera uma lista de Strings onde cada elemento é uma
String usando o argumento passado como delimitador da
String.
“teste.teste1”.rsplit(".") retorna a lista [“teste”,”teste1”]
“quando olhei a terra ardendo”.rsplit(" ") retorna a lista
[“quando”,”olhei”, “a”,”terra”,”ardendo”]
EXERCÍCIOS
Dado um arquivo contendo a identidade e o nome de cada pessoa, gere e
exiba o conteúdo de um dicionário onde as chaves são as identidades e os
valores os nomes.
5384423
4345566
3235574
...
Manoel
Alberto
Mariana
Dados os seguintes endereços IPs, mostre os validos e os inválidos (um
endereço ip válido não pode ter uma de suas partes maior que 224).
200.135.80.9
192.168.1.1
8.35.67.74
257.32.4.5
85.345.1.2
1.2.3.4
9.8.234.5
192.168.0.256
Download