quinta-feira, 25 de maio de 2017

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

Olá amiguinhos! Boa vida!


Na aventura de hoje, vamos aprender a abrir um arquivo de texto.
Isso é muito útil para abrirmos arquivos .txt, .csv, .log ou qualquer outro tipo de arquivo onde haja texto puro (sem formatação).
Pois bem. Veja só👓:

Copie e cole a letra dessa linda canção abaixo para um bloco de notas e salve-a com o nome dbz.txt:

Posso pressentir o perigo e o caos
E ninguém agora vai me amedrontar
Com a minha mente vou a mil lugares
E a imaginação me dá forças para voar
Sonhos, desejamos alcançar
Ser alguém com o poder maior, que você ja tem

Liberdade é correr pelo céu
Sempre unidos, vamos triunfar
E se a nossa luta é pra valer
Vou mostrar meu valor
Dragon Ball Z, meu compromisso é sempre vencer!

Liberdade, nova era vai chegar, energia tenho para usar

E com alegria de viver, ninguém vai me deter
Dragon Ball Z, meu compromisso é sempre vencer!

Agora crie um script em python assim:

with open("dbz.txt","r") as arquivo:
    txt=arquivo.readlines()
print(txt)


Entendeu? Como não? hahahah

Vejam só:

with open("dbz.txt","r"as arquivo:
Aqui estou abrindo (open) o arquivo chamado dbz.txt; Caso o seu arquivo texto esteja em uma pasta diferente da que o seu script .py está (o que é muito provável) você precisaria passar o caminho todo, por exemplo: "c:/meus_textos/dbz.txt" (com as barras invertidas do padrão windows).
A opção r indica que iremos abrir o arquivo apenas para leitura (read). Também há as opções 'w' e 'a'. 'w' para escrever (write) em um arquivo e 'a' para adicionar (add) algo ao arquivo. Na primeira opção, caso o arquivo já exista, tudo que houver nele será apagado ou sobrescrito pelos novos dados inseridos. Na segunda opção o texto será adicionado ao final do texto existente, caso o arquivo já exista. 
Na parte:
as arquivo:
eu chamei de "arquivo" a instãncia do objeto de texto. Em outras palavras, eu guardei o texto em uma "variável mágica" chamada arquivo.
Essa "variável mágica" na verdade é um objeto. Esse objeto possui alguns métodos relacionados a ele. Nesse caso, usamos em txt=arquivo.readlines() o método readlines para guardar na variável txt as linhas lidas do arquivo. Esse método transforma cada linha do seu texto em um elemento de uma lista (lembra que já aprendemos sobre listas?).
Aí o print(txt) nos mostra o resultado a seguir:

['Posso pressentir o perigo e o caos\n', 'E ninguém agora vai me amedrontar\n', 'Com a minha mente vou a mil lugares\n', 'E a imaginação me dá forças para voar\n', 'Sonhos, desejamos alcançar\n', 'Ser alguém com o poder maior, que você ja tem\n', '\n', 'Liberdade é correr pelo céu\n', 'Sempre unidos, vamos triunfar\n', 'E se a nossa luta é pra valer\n', 'Vou mostrar meu valor\n', 'Dragon Ball Z, meu compromisso é sempre vencer!\n', '\n', 'Liberdade, nova era vai chegar, energia tenho para usar\n', '\n', 'E com alegria de viver, ninguém vai me deter\n', 'Dragon Ball Z, meu compromisso é sempre vencer!\n']

Legal, né? SQN
Tá meio feio de ver isso aí. Porém aqui você pode perceber que a lista foi criada (pra recordar, a lista é limitada pelos colchetes "[" e "]"

Agora, vamos tentar de novo, mas de uma forma mais bonitinha:

with open("dbz.txt","r"as arquivo:
    txt=arquivo.readlines()
for linha in txt:
    print(linha)

Execute esse código acima e me diga o que achou (aqui nos comentários mesmo).

Só pra entender, esse for percorreu cada elemento contido na lista txt e, a cada iteração, imprimiu o valor armazenado - que no caso foram as linhas da bela canção.

É isso aí galera! Gostaram da dica? Ficou alguma dúvida? Quer sugerir um novo post? Deixe aqui seu recadinho do coração que terei prazer em atendê-lo.

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.