Linha 286: Linha 286:
:   
:   
: # Inserindo as atividades do dia no arquivo tarefas.txt
: # Inserindo as atividades do dia no arquivo tarefas.txt
: newarq.write("01. Limpar canil                \n")
: newarq.write("01. Organizar escritório                \n")
: newarq.write("02. Lavar churrasqueira         \n")
: newarq.write("02. Lavar churrasqueira               \n")
: newarq.write("03. Trocar lâmpadas da sala     \n")
: newarq.write("03. Trocar lâmpadas da sala       \n")
: newarq.write("04. Cortar grama                 \n")
: newarq.write("04. Cortar grama                         \n")
: newarq.write("05. Consertat maçaneta  da porta \n")
: newarq.write("05. Consertat maçaneta  da porta\n")
: newarq.write("06. Levar Summer para passear   \n")
: newarq.write("06. Levar Summer para passear \n")
: newarq.write("07. Fazer compras no mercado     \n")
: newarq.write("07. Fazer compras no mercado   \n")
: newarq.write("08. Pagar mensalidade do clube   \n")
: newarq.write("08. Pagar mensalidade do clube \n")
: newarq.write("09. Configurar modem             \n")
: newarq.write("09. Configurar modem                 \n")
: newarq.write("10. Encher pneus do carro       \n")
: newarq.write("10. Encher pneus do carro           \n")
: newarq.close()
: newarq.close()
:  
:  
Linha 321: Linha 321:
* Repare na saída:
* Repare na saída:
  01.  
  01.  
  Limpar canil               
  Organizar escritório   
  02.  
  02.  
  Lavar churrasqueira           
  Lavar churrasqueira           
Linha 328: Linha 328:
<br>
<br>
* Pode-se notar que é possível ler uma linha definindo o tamanho do string
* Pode-se notar que é possível ler uma linha definindo o tamanho do string
* Se a linha estiver bem estrturada é possível separar cada parte de maneira organizada
* Se a linha estiver bem estruturada é possível separar cada parte de maneira organizada
<br>
<br>


Linha 336: Linha 336:
*** A. Gere um arquivo alunos.doc
*** A. Gere um arquivo alunos.doc
*** B. Insira os seguintes campos: Nro, Nome e Matricula onde Nro começa em 1 e cresce de 1 em 1
*** B. Insira os seguintes campos: Nro, Nome e Matricula onde Nro começa em 1 e cresce de 1 em 1
*** C. Inclua várias linhas de dados
*** C. Receba os dados a partir do teclado e grave-os no arquivo alunos.doc
*** D. Leia cada linha imprimindo segundo o padrão abaixo
*** D. Leia cada linha imprimindo segundo o padrão abaixo
*** E. ! Numero ! Nome do aluno                                  ! Matricula  !  Presença
*** E. ! Numero ! Nome do aluno                                  ! Matricula  !  Presença
** 3) Crie um menu que permita cadastrar e ler contatos
** 3) Crie um menu que permita cadastrar e ler contatos

Edição das 23h01min de 19 de fevereiro de 2017

Manipulação de arquivos


  • Para criar arquivos em Python, inicialmente precisamos abrir um arquivo existente ou um novo
  • Para isso, utilizamos a função open


  • Para trabalhar com arquivos em Python, é necessário primeiro "abrir" o arquivo
  • Depois "ler" ou "escrever" neste arquivo
  • Finalmente "fechá-lo"


Abrindo arquivos


  • Função open:
    • Cria novos arquivos
    • Abrie arquivos existentes, como leitura ou escrita


  • Sintaxe:
    • variável = open("file", "modo")
      • variável = Nome da variável que vai receber o conteúdo da função open
      • file = Nome do arquivo que se quer ler ou escrever.
      • modo = Indica o que se quer fazer com o arquivo [ "r" (read), "w" (write)]


  • Exemplo na prática:
# Programa que abre arquivo.txt para gravação de dados e mostra o tipo do dado
  1. Digitando na linha de comando
>>> var_file = open("arquivo.txt","w")
>>> print(var_file)
open file 'arquivo.txt', mode 'w' at 0x7f775c2ec6f0>
>>> type(var_file)
<type 'file'>
# Fim programa -------------------------------------------------------


  • Pode-se verificar mais um tipo de dado além de int, float, string, lists e dictionaries, o tipo file.


  • Ação:
    • O arquivo.txt foi criado no modo escrita
    • É exibido o endereço do arquivo que se encontra em memória RAM (opcional)
    • O tipo da variável "var_file" com a função type() é verificado (opcional).


  • Obs:
    • Se o arquivo "arquivo.txt" já existisse, ele seria aberto como modo escrita
    • Como no exemplo ele não existia, então foi criado como um novo arquivo


  • Como Python é uma linguagem orientada a objetos, agora a variável "var_file" é um objeto, e podemos acessar os métodos desse objeto que são os seguintes:
    • write(data)
      • Escreve a string data para o arquivo, na posição atual ou ao final do arquivo, dependendo do modo de abertura
      • Esta função falha se o arquivo foi aberto com modo "r".
    • close()
      • Fecha o arquivo. Sempre utilizado no final da manipulação do arquivo
    • read()
      • Retorna uma string única com todo o conteúdo do arquivo
    • readline()
      • Retorna a próxima linha do arquivo, e incrementa a posição atual
    • readlines()
      • Retorna todo o conteúdo do arquivo em uma lista, uma linha do arquivo por elemento da lista
    • seek(n)
      • Muda a posição atual do arquivo para o valor indicado em n


Gravando linhas no arquivo


  • Exemplo de como escrever uma frase em um arquivo utilizando método write():
# Programa que abre o arquivo arquivo1.txt e insere 5 linhas

newfile = open("/home/lclaudio/arquivo1.txt","w")
newfile.write("casa")
newfile.write("bola")
newfile.write("dado")
newfile.write("faca")
newfile.write("gato")
newfile.close()
# Após ter escrito no arquivo através do método write(), é necessário fechar o arquivo como o método close()
# Exemplo:
newfile.close()
# Fim programa -------------------------------------------------------
  • Abra o arquivo gerado e verifique o conteúdo:
    • Linux: comando cat nomearquivo
    • Windows: abra com Bloco de Notas
  • Pode-se ver:
    • casaboladadofacagato



  • Agora, executando a seguinte sequência:
    • casa
    • bola
    • dado
    • faca
    • gato


  • O \n serve para definir a quebra de linha
  • Dessa forma, dados podem ser gravados num arquivo e poderão ser armazenados após comando close


Exercícios


  • Crie os arquivos abaixo com os conteúdos sugeridos e verifique se a gravação ocorreu como desejado:
  1. Arquivo minhaequipe.doc com os nomes dos integrantes de sua equipe
  2. Arquivo tarefas.txt com 10 atividades para a semana
  3. Arquivo compras.tst com 15 itens que pretende comprar
  4. Arquivo library.csv com o nomes de pelo menos 8 livros que leu desde o ano passado
  5. Arquivo gentileza,doc com 30 nomes de pessoas que te agradaram nos últimos tempos



  • Agora que alguns dados foram criados e gravados, vamos ler um arquivo.
    • Modos para ler arquivos:
      • readlines()
      • read()
      • readline()


1. Lendo um arquivo - readlines( )


  • Método readlines
    • O arquivo "minhaequipe.doc" será lido pelo método readlines()
    • Inicialmente, temos que abrir o arquivo, dessa vez com a opção r
# Programa que abre o arquivo minhaequipe.doc para leitura e le todas as linhas de uma vez
readarq = open("/home/lclaudio/minhaequipe.doc","r")
print(readarq)
type(readarq)
# Lendo e imprimindo todo o arquivo
texto = readarq.readlines()
print(texto)
readarq.close()
# Fim programa -------------------------------------------------------


  • Resultado: Interessante que neste caso, apareceram todas as linhas montadas num vetor e contendo a quebra de linha \n
['Alez Vaz Mendes\n', 'Lucas Guandalini Marchesoni\n', 'Luiz Cláudio Theodoro\n', 'Murilo Borges Gomes Machado\n', 'Pedro Aparecido Damaso de Melo\n', 'Rafael Leonardo Aquino\n', 'Rogério   de Freitas\n']


  • Lendo o arquivo e imprimindo de outra maneira
    • O arquivo "minhaequipe.doc" novamente é lido pelo método readlines()
# Programa que abre o arquivo minhaequipe.doc para leitura. lê e imprime uma linha por vez
readarq = open("/home/lclaudio/minhaequipe.doc","r")
print(readarq)
type(readarq)
  1. Lendo todo o arquivo e imprimindo item a item
texto = readarq.readlines()
for i in range(0,len(texto)):
print(texto[i])
readarq.close()
# Fim programa -------------------------------------------------------
  • Dessa vez, é impresso linha a linha:
Alez Vaz Mendes
Lucas Guandalini Marchesoni
Luiz Cláudio Theodoro
Murilo Borges Gomes Machado
Pedro Aparecido Damaso de Melo
Rafael Leonardo Aquino
Rogério de Freitas


2. Lendo um arquivo - read( )


  • Primeiro, criando o arquivo com alguns dados:
# Programa que abre o arquivo tarefas.txt para gravação, insere 10 atividades e posteriormente lê todas as linhas de uma vez
newarq = open("/home/lclaudio/tarefas.txt","w")
print(newarq) #apenas para demonstração
type(newarq) #apenas para demonstração
# Inserindo as atividades do dia no arquivo tarefas.txt
newarq.write("01. Organizar escritório\n")
newarq.write("02. Lavar churrasqueira\n")
newarq.write("03. Trocar lâmpadas da sala\n")
newarq.write("04. Cortar grama\n")
newarq.write("05. Consertar maçaneta da porta\n")
newarq.write("06. Levar Summer para passear\n")
newarq.write("07. Fazer compras no sacolão\n")
newarq.write("08. Pagar mensalidade do clube\n")
newarq.write("09. Configurar modem\n")
newarq.write("10. Encher pneus do carro\n")
newarq.close()
#Método readl( )
# O arquivo "tarefas.txt" será lido pelo método read()
# Antes disso, temos que abrir o arquivo, novamente com a opção r
# Lendo e imprimindo todo o arquivo
readarq = open("/home/lclaudio/tarefas.txt","r")
texto = readarq.read()
print(texto)
readarq.close()
# Fim programa -------------------------------------------------------
  • O resultado é mostrado abaixo:
01. Organizar escritório
02. Lavar churrasqueira
03. Trocar lâmpadas da sala
04. Cortar grama
05. Consertar maçaneta  da porta
06. Levar Summer para passear
07. Fazer compras no mercado
08. Pagar mensalidade do clube
09. Configurar modem
10. Encher pneus do carro
  • Nota-se que a saída, não é uma lista como no readlines( ) mas sim um string contendo todas as atividades, separadas linha a linha


3. Lendo um arquivo - readline( )


  • Novamente criando o arquivo com as mesmas atividades:
# Programa que cria um arquivo, insere 10 linhas e depois lê apenas uma
newarq = open("/home/lclaudio/tarefas.txt","w")
print(newarq)
type(newarq)
# Inserindo as atividades do dia no arquivo tarefas.txt
newarq.write("01. Organizar escritório\n")
newarq.write("02. Lavar churrasqueira\n")
newarq.write("03. Trocar lâmpadas da sala\n")
newarq.write("04. Cortar grama\n")
newarq.write("05. Consertat maçaneta da porta\n")
newarq.write("06. Levar Summer para passear\n")
newarq.write("07. Fazer compras no mercado\n")
newarq.write("08. Pagar mensalidade do clube\n")
newarq.write("09. Configurar modem\n")
newarq.write("10. Encher pneus do carro\n")
newarq.close()
# Lendo e imprimindo todo o arquivo
readarq = open("/home/lclaudio/tarefas.txt","r")
texto = readarq.readline()
print(texto)
readarq.close()
# Fim programa -------------------------------------------------------
  • Resultado: Apenas uma linha lida
01. Organizar escritório


  • Para ter todas as linhas do arquivo, é necessária uma condição de parada
    • Nesse caso, poderemos ler linha a linha até que encontremos " " (branco) indicado fim de arquivo
# Lendo e imprimindo todo o arquivo

# Programa que o abre o arquivo tarefas.txt e lê as linhas até o final do arquivo
readarq = open("/home/lclaudio/tarefas.txt","r")
texto = "alguma coisa"
while(texto != ""):
texto = readarq.readline().strip()
print(texto)
readarq.close()
# Fim programa -------------------------------------------------------
  • Exemplo de programa que lê tamanhos definidos da linha
# Programa que abre o arquivo tarefas.txt para leitura e lê as linhas de acordo com um tamanho definido
newarq = open("/home/lclaudio/tarefas.txt","w")
print(newarq)
type(newarq)
# Inserindo as atividades do dia no arquivo tarefas.txt
newarq.write("01. Organizar escritório \n")
newarq.write("02. Lavar churrasqueira \n")
newarq.write("03. Trocar lâmpadas da sala \n")
newarq.write("04. Cortar grama \n")
newarq.write("05. Consertat maçaneta da porta\n")
newarq.write("06. Levar Summer para passear \n")
newarq.write("07. Fazer compras no mercado \n")
newarq.write("08. Pagar mensalidade do clube \n")
newarq.write("09. Configurar modem \n")
newarq.write("10. Encher pneus do carro \n")
newarq.close()
# Lendo e imprimindo todo o arquivo
readarq = open("/home/lclaudio/tarefas.txt","r")
texto1 = readarq.readline(4)
texto2 = readarq.readline(29)
texto3 = readarq.readline(1)
print(texto1)
print(texto2)
texto1 = readarq.readline(4)
texto2 = readarq.readline(29)
texto3 = readarq.readline(1)
print(texto1)
print(texto2)
texto1 = readarq.readline(4)
texto2 = readarq.readline(29)
texto3 = readarq.readline(1)
print(texto1)
print(texto2)
readarq.close()
# Fim programa -------------------------------------------------------
  • Repare na saída:
01. 
Organizar escritório     
02. 
Lavar churrasqueira          
03. 
Trocar lâmpadas da sala      


  • Pode-se notar que é possível ler uma linha definindo o tamanho do string
  • Se a linha estiver bem estruturada é possível separar cada parte de maneira organizada


  • Exercício:
    • 1) Evolua no programa, criando um loop, lendo e imprimindo todas as linhas
    • 2) Crie um programa que atenda a seguinte situação:
      • A. Gere um arquivo alunos.doc
      • B. Insira os seguintes campos: Nro, Nome e Matricula onde Nro começa em 1 e cresce de 1 em 1
      • C. Receba os dados a partir do teclado e grave-os no arquivo alunos.doc
      • D. Leia cada linha imprimindo segundo o padrão abaixo
      • E. ! Numero ! Nome do aluno  ! Matricula  ! Presença
    • 3) Crie um menu que permita cadastrar e ler contatos