Workshop Python.2

Embed Size (px)

Citation preview

Python
II

Quem estiver no Windows e no tiver Python instalado faa download em:

http://www.portablepython.com

Arquivos
Mdulos e Scripts
Orientao a Objetos
Exerccio
Leituras Recomendadas

Manipulando Arquivos

Similar a C, tanto nas funes como nos modos de acesso.

Abrir com file(, )

Modos de

leitura ('r')

escrita ('w')

append ('a')

Modo binrio ('b')

Modo misto com '+'
(leitura e escrita)

open/file

close

write

read

readline

write

writeline

seek

tell

open/file open() apenas chama file()

Manipulando Arquivos

Abrindo um arquivo para leitura

open('foobar.txt', 'r')

Abrindo um arquivo para escrita
(APAGA O CONTEDO DO ARQUIVO!!!)

open('foobar.txt', 'w')

Manipulando Arquivos

Uso comum: iterando linhas:

Removendo o '\n' no final da linha: line.strip()

close() opcional (chamado automaticamente quando destrudo)

arq = open('foobar.txt', 'r')

for linha in arq:

print linha

arq.close()

O objeto file seu prprio iterador.
A cada iterao do for, o mtodo next de file chamado.

handle = open('file.txt', 'r')

for line in handle:print line

Exerccio

Abra um arquivo de texto A para leitura

Crie (para escrita) um novo arquivo B

Escreva o contedo do arquivo A no arquivo B, intercalando suas linhas com linhas em branco

Exemplo:B

A

Linha 1

Linha 2

Linha 3

Linha Direta

Linha 1

Linha 2

Linha 3

Linha Direta

Soluo

a = open('arquivo1.txt', 'r')

b = open('arquivo2.txt', 'w')

for line in a:

b.write(line)

b.write('\n')

Arquivos
Mdulos e Scripts
Orientao a Objetos
Exerccio
Leituras Recomendadas

Mdulos

Arquivo contendo definies e comandos python (scripts...)

Podem ser em Python ou nativos (C/C++)

Importando:




Mdulo 'principal' tem o atributo __name__ como __main__

import nomedomodulo

import nomedomodulo as mod

from nomedomodulo import foobar

Mdulos

Mdulo sys Informaes do sistema

sys.exit(0) Sai do interpretador ou programa

sys.argv Lista de argumentos passados para o programa

import sys

print sys.argvfor arg in sys.argv: print argargs.pyExecute na linha de comando:

python args.py argumento1 argumento2

Exerccio

Modifique o programa de cpia de arquivos para receber os nomes dos arquivos de origem e de destino pela linha de comando.

Soluo

import sys

import os

if len(sys.argv) < 3 or \:

not os.path.isfile(sys.argv[1]):

sys.exit(1)

a = open(sys.argv[1], 'r')

b = open(sys.argv[2], 'w')

for line in a:

b.write(line)

b.write('\n')

a.close()

b.close()

Arquivos
Mdulos e Scripts
Orientao a Objetos
Exerccio
Leituras Recomendadas

Classes

class Automovel:

def __init__(self, placa='XX-123'):
self.placa = placa

def get_placa(self):
return self.placa

def dirigir(self, velocidade):
print 'Estou dirigindo a %d' \
' km/h' % velocidade

construtor

Automovel

+ placa : str

__init__(str) : None

get_placa() : str

dirigir(int) : None

mtodos

self

Herana

Java




Python

public class Caminhao extends Carro {

public Caminhao(String placa) {

super(placa);

}

}

class Caminhao (Carro):

def __init__(self, placa):

Carro.__init__(self, placa)

Carro

+ placa : str

__init__(str) : None

Caminhao

__init__(str) : None

Herana Mltipla

C++


Python

class Transformer : public Automovel, public Robo {

...

};

class Transformer(Automovel, Robo):

...

Automovel

Transformer

Robo

Resoluo dos mtodos:

Busca em profundidade, Esquerda para Direita

Arquivos
Mdulos e Scripts
Orientao a Objetos
Exerccio
Leituras Recomendadas

Exerccio

Crie uma classe Ponto conforme diagrama ao lado, salve o cdigo num arquivo de nome ponto.py

O mtodo __str__ retorna uma string se algum der um print objeto. Faa com que mostre os dados do objeto no formato: Nome: (x, y)

Crie outro script que importe ponto, e leia um arquivo contendo informaes sobre vrios pontos, criando um objeto Ponto para cada entrada lida.

Ponto

+ nome : str
+ x : int
+ y : int

__init__(nome, x, y) : None

__str__() : str

Soluo:ponto.py class Ponto: def __init__(self, nome=None, x=0, y =0): self.nome = nome self.x, self.y = x, y

def __str__(self): print '%s: (%d,%d)' % \ (self.nome ,self.x, self.y)execicio.py from ponto import Ponto

if __name__ == '__main__':

f = open('arquivo.txt', 'r') lines = readlines() f.close()

pontos = [] for i in range(0, len(lines), 2): nome = lines[i] # sem list comprehension x, y = lines[i+1] x, y = int(x), int(y) # com list comprehension # x, y = [int(n) for n in lines(i+1)] pontos.append(Ponto(nome, x, y))

for ponto in pontos: print ponto

Exerccio (cont.)

Coloque cada objeto Ponto numa lista.

Imprima cada elemento da lista.

A100 200B130 150C500 239OutroPonto199 54pontos.txt

Nota Sobre List Comprehensions

List Comprehensions criam listas a partir de listas, de forma anloga a uma expresso matemtica.

A = {0, 2, ... 99}

S = {2x | x A, x > 10 e x < 50}

A = range(100)

S = [2*x for x in A if x > 10 and x < 50]

Arquivos
Mdulos e Scripts
Orientao a Objetos
Exerccio
Leituras Recomendadas

Leituras Recomendadas

Workshop de Python no CIn, parte 1

http://www.cin.ufpe.br/~cinlug/wiki/index.php/Workshop_de_Python_no_CIn%2C_parte_1

File Management in Python

http://www.devshed.com/c/a/Python/File-Management-in-Python/

Python Library Reference (em Javans: a API de Python)

http://docs.python.org/lib/lib.html

Curso de Python em 5 Horas

http://gustavobarbieri.com.br/palestras/python-5hs/

Resumo Python

http://www.gustavobarbieri.com.br/python/aulas_python/resumo.pdf

http://www.cinlug-br.org

Atribuio-Compartilhamento pela mesma licena 2.5
(http://creativecommons.org/licenses/by-sa/2.5/deed.pt)

Voc pode:

copiar, distribuir, exibir e executar a obra

criar obras derivadas

fazer uso comercial da obra

Sob as seguintes condies:

Atribuio. Voc deve dar crdito ao autor original, da forma especificada pelo autor ou licenciante.

Compartilhamento pela mesma Licena. Se voc alterar, transformar, ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idntica a esta.

Para cada novo uso ou distribuio, voc deve deixar claro para outros os termos da licena desta obra.

Qualquer uma destas condies podem ser renunciadas, desde que Voc obtenha permisso do autor.

Qualquer direito de uso legtimo (ou "fair use") concedido por lei, ou qualquer outro direito protegido pela legislao local, no so em hiptese alguma afetados pelo disposto acima.

Este um sumrio para leigos da Licena Jurdica
(na ntegra: http://creativecommons.org/licenses/by-sa/2.5/br/legalcode).
Termo de exonerao de responsabilidade: http://creativecommons.org/licenses/disclaimer-popup?lang=pt

Clique para editar o formato do ttulo de texto

Clique para editar o formato do ttulo de texto

Clique para editar o formato do texto em estrutura de tpicos

Segundo Nvel da Estrutura de Tpicos

Terceiro Nvel da Estrutura de Tpicos

Quarto Nvel da Estrutura de Tpicos

Quinto Nvel da Estrutura de Tpicos

Sexto Nvel da Estrutura de Tpicos

Stimo Nvel da Estrutura de Tpicos

Oitavo Nvel da Estrutura de Tpicos

Nono Nvel da Estrutura de Tpicos

21345