quinta-feira, 25 de maio de 2017

Coloca o óculos que vamos ler um texto (de um arquivo)

Muita gente que já programou em outras linguagens, se apaixonou por Python por muitos motivos, mas um deles é a facilidade com que se constrói as coisas. Um bom exemplo disso é o próprio "Hello world". Veja só:

C#:

// A Hello World! program in C#. using System; namespace HelloWorld { class Hello { static void Main() { Console.WriteLine("Hello World!"); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } }
Java:
public class HelloWorld

{
public static void main (String[] args)
{ // Prints "Hello, World" to the terminal window. System.out.println("Hello, World");
}
}

Cobol:
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
* simple hello world program
PROCEDURE DIVISION.
    DISPLAY 'Hello world!'.
    STOP RUN.
Delphi:
program HelloWorld;
{$APPTYPE CONSOLE}
begin
WriteLn('Hello World');
end.
Python: print("Goodbye, World!") Pois bem... O que muita gente que programa em Python não sabe é que o que é simples pode ficar ainda mais simples! Vamos a alguns exemplos: Temos esse lindo laço de repetição chamado for: listinha = [] for quadrado in range(10): listinha.append(quadrado**2) print(listinha) Bem... Essa foi fácil né? Mas vamos dar uma melhorada nisso: listinha = list(map(lambda x: x**2, range(10))) print(listinha) Uai! Que coisa massa, hein?? Mas não para por aí! Vamos remelhorar! listinha = [x**2 for x in range(10)] print(listinha) Nossa!!! Tô mais bobo que o Kuririn quando o Vegeta se transformou em Super Sayajin! Resultado de imagem para kuririn Muito legal né? Agora vamos ver outra bruxaria do Python. Vamos criar duplas de números onde os algarismos não se repitam entre si, usando duas listas: duplinha = [] for x in [1,2,3]: for y in [3,1,4]: if x!=y: duplinha.append((x,y)) print(duplinha) Aplicando a magia: duplinha = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] print(duplinha) Sensacional né? Esse tio Python é mais inacrebelieveble que a vassoura de aço!!! Imagem relacionada Agora a saideira: vamos fazer uma matriz transposta: matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] transposta = [[row[i] for row in matrix] for i in range(4)] print(transposta) QUE COISA MAIS LINDA DE DEUS!!! Imagem relacionada O nome dessa mágica é LIST COMPREHENTION. Vale a pena pesquisar sobre. Inclusive, temos esse belo vídeo do mestre da vida Edu Mendes:

quinta-feira, 20 de abril de 2017

E o CSV? Como faz pra fazer?

python3-dicas CSV
Olá Pythonistas do mundo Terra!

Bom ou mais?


Pois bem. Muitos de nós utilizamos os arquivos com valores separados por vírgula (Comma Separated Values - CSV).

De forma didática, podemos comparar o CSV como sendo o espírito ou alma de planilhas, sites,
tabelas e qualquer outra fonte de dados agrupados.

Então, aqui vai um jeito de se ler e escrever arquivos no formato CSV:

Suponhamos que temos o seguinte arquivo CSV:

poder_de_luta.csv

id,personagem,poder
1,Videl,150
2,Satan,135
3,Kuririn,650000
4,Gohan,25000000
5,GohanSSJ,1250000000
6,Vegeta,160000000
7,Vegeta,SSJ=8000000000
8,Tenshinhan,750000000
9,TenshinhanKikohu=5000000000
10,Kakaroto,200000000
11,KakarotoSSJ,10000000000
12,Trunks,160000000
13,Goten,3000000

Para ler esse arquivo precisamos importar a biblioteca csv:


Manipulando CSV

Importando a biblioteca csv:

In [1]:
import csv

Abrindo o arquivo e atribuindo seus valores a uma variável:

In [6]:
data = open('poder_de_luta.csv')
print(data)
<_io.TextIOWrapper name='poder_de_luta.csv' mode='r' encoding='UTF-8'>

Mas jovem! Eu não entendi! Onde estão os dados do arquivo?

Calma, meu chapa! A variável "data" agora está abrigando um TextIOWrapper. Futuramente farei um post explicando melhor isso mas, basicamente, isso quer dizer que minha variável abriga uma espécie de classe contendo meus dados.

Agora vamos "processar" os dados e transformá-lso em um objeto da da biblioteca 'csv':

In [3]:
csv_data = csv.reader(data)
In [4]:
print(csv_data)
<_csv.reader object at 0x7f63c0625f28>

Ah não, cara! Você tá de sacanagem! Onde estão meus dados???

Tô de sacanagem não! Eu precisava dessa etapa para poder trabalhar com os dados.

Então vamos ao que interessa:

In [7]:
for poder in csv_data:
    print(poder)
['id', 'personagem', 'poder']
['1', 'Videl', '150']
['2', 'Satan', '135']
['3', 'Kuririn', '650000']
['4', 'Gohan', '25000000']
['5', 'GohanSSJ', '1250000000']
['6', 'Vegeta', '160000000']
['7', 'Vegeta', 'SSJ=8000000000']
['8', 'Tenshinhan', '750000000']
['9', 'TenshinhanKikohu=5000000000']
['10', 'Kakaroto', '200000000']
['11', 'KakarotoSSJ', '10000000000']
['12', 'Trunks', '160000000']
['13', 'Goten', '3000000']

Até que enfim hein!

Poizé! Olha que beleza! O resultado foram vários vetores (ou arrays) contendo os valores do arquivo. A partir daí, você pode utilizar as técnicas que ensinei previamente sobre as listas para "brincar" com esses dados.

Para os aprendizes mais avançadinhos, sugiro que pesquisem sobre o framework chamado Pandas. Ele te dá uma infinidade de possibilidades para trabalhar com DataSets e DataFrames. Mas isso são cenas pros próximos capítulos.