CSE 111: Programação com Funções

Escrevendo Arquivos de Texto

Arquivos de Texto

Em termos gerais, existem dois tipos de arquivos: arquivos de texto e arquivos binários. Um arquivo de texto armazena palavras e números como texto legível por humanos. Um arquivo binário armazena imagens, diagramas, sons, músicas, filmes e outras mídias como números em um formato que não é diretamente legível por humanos.

Escrevendo em um Arquivo de Texto

Para escrever texto em um arquivo, um programa deve chamar a função integrada open para abrir o arquivo e escrever ou adicionar texto e, em seguida, chamar o método .write ou a função integrada print. O exemplo 1 contém um programa que pede ao usuário uma citação inspiradora e, então, anexa essa citação a um arquivo de texto. Na linha 6, o programa chama a função integrada open e, na linha 11, chama a função integrada print.

# Exemplo 1
def main():
    # Pede ao usuário para digitar uma citação.
    citacao = input("Por favor, digite uma citação inspiradora: ")
    # Abre o arquivo citacoes.txt para adicionar o texto.
    with open("citacoes.txt", "at") as arquivo_de_citacoes:
        # Exibe a citação no arquivo de texto.
        print(citacao, file=arquivo_de_citacoes)
# Chama main para iniciar este programa.
if __name__ == "__main__":
    main()

O exemplo 2 mostra como escrever o conteúdo de uma lista em um arquivo de texto. Na linha 16, o programa chama a função integrada open para abrir um arquivo de texto para gravar nele. Já nas linhas 19–20, o programa usa um loop for para exibir cada elemento de uma lista em uma linha separada.

# Exemplo 2
def main():
    # Cria uma lista que contenha tipos de barcos pequenos.
    lista_de_barcos = ["canoa", "caiaque", "barquinho a remo", "bote"]
    # Escreva a lista em um arquivo chamado barcos_pequenos.txt
    escrever_lista("barcos_pequenos.txt", lista_de_barcos)
def escrever_lista(nomedoarquivo, lista_de_texto):
    """Escreva o conteúdo de uma lista em um arquivo de texto.
    Parâmetros
        nomedoarquivo: o nome do arquivo de texto a ser escrito
        lista_de_texto: a lista para gravar no arquivo de texto
    Retorno: nada
    """
    # Abre o arquivo de texto para escrita e armazena uma referência
    # para o arquivo aberto em uma variável chamada arquivo_de_texto.
    with open(nomedoarquivo, "wt") as arquivo_de_texto:
        # Exibe o conteúdo da lista no
        # arquivo de texto, um item por linha.
        for elemento in lista_de_texto:
            print(elemento, file=arquivo_de_texto)
# Chama main para iniciar este programa.
if __name__ == "__main__":
    main()

Arquivos CSV

Muitos sistemas de computador importam e exportam dados em arquivos CSV. CSV é uma sigla em inglês que significa "valores separados por vírgula". Um arquivo CSV é um arquivo de texto que contém dados tabulares com cada linha em uma linha separada do arquivo e cada célula (coluna) separada por uma vírgula. O exemplo a seguir mostra o conteúdo de um arquivo CSV chamado hinos.csv que armazena dados sobre músicas religiosas. Observe que a primeira linha do arquivo contém títulos de colunas, as próximas quatro linhas contêm dados sobre quatro hinos e cada linha contém três colunas separadas por vírgulas.

Nome, Autor, Compositor
Erguei-vos Cantando, John Wade, John Wade
Anjos Descem a Cantar, French Carol, French Carol
Noite Feliz, Joseph Mohr, Franz Gruber
No Dia de Natal, Laudis Corona, Laudis Corona

O Python tem um módulo padrão chamado csv que inclui funcionalidade para ler e gravar em arquivos CSV.

Escrevendo uma Lista Composta em um Arquivo CSV

O exemplo 3 mostra como escrever, ou gravar, o conteúdo de uma lista composta em um arquivo CSV. Na linha 28, o programa chama a função integrada open para abrir um arquivo de texto para escrita. Já na linha 31, o programa usa o módulo csv para criar um objeto csv.writer. Nas linhas 33–34, ele usa um loop for e o objeto csv.writer para gravar cada linha no arquivo CSV.

# Exemplo 3
import csv
def main():
    lista_de_titulos = ["Título", "Autor", "Compositor"]
    # Cria uma lista composta de hinos.
    lista_de_hinos = [
      ["Erguei-vos Cantando", "John Wade", "John Wade"],
      ["Anjos Descem a Cantar", "French Carol", "French Carol"],
      ["Noite Feliz", "Joseph Mohr", "Franz Gruber"],
      ["No Dia de Natal", "Laudis Corona", "Laudis Corona"]
    ]
    # Chama a função escrever_lista_composta que
    # gravará a lista de hinos em um arquivo chamado "hinos.csv".
    escrever_lista_composta("hinos.csv", lista_de_hinos, lista_de_titulos)
def escrever_lista_composta(nomedoarquivo, lista_composta,
        lista_de_titulos=None):
    """Grava o conteúdo de uma lista composta em um arquivo CSV.
    Parâmetros
        nomedoarquivo: o nome do arquivo CSV a ser escrito
        lista_composta: a lista para gravar no arquivo CSV
        lista_de_titulos: uma lista que contém os títulos das colunas.
            se lista_de_titulos for None, esta função não
            gravará títulos no arquivo CSV.
    Retorno: nada
    """
    # Abre o arquivo de texto para escrita e armazena uma referência
    # para o arquivo aberto em uma variável chamada arquivo_csv.
    with open(nomedoarquivo, "wt", newline="") as arquivo_csv:
        # Usa o módulo csv para criar um objeto escritor
        # que gravará no arquivo CSV aberto.
        gravador = csv.writer(arquivo_csv)
        # if lista_de_titulos não for None, que significa nenhum valor,
        # grava os títulos no arquivo CSV.
        if lista_de_titulos is not None:
            gravador.writerow(lista_de_titulos)
        # Grava o conteúdo da lista no
        # arquivo CSV, linha por linha.
        for lista_de_linhas in lista_composta:
            gravador.writerow(lista_de_linhas)
# Chama main para iniciar este programa.
if __name__ == "__main__":
    main()

Escrevendo um Dicionário em um Arquivo CSV

O exemplo 4 mostra como gravar o conteúdo de um dicionário em um arquivo CSV. Na linha 39, o programa chama a função integrada open para abrir um arquivo de texto para escrita. Já na linha 42, o programa usa o módulo csv para criar um objeto csv.writer. Nas linhas 44–45, ele usa um loop for e o objeto csv.writer para gravar cada linha no arquivo CSV.

# Exemplo 4
import csv
def main():
    lista_de_titulos = ["BYUI ID", "Nome"]
    # Cria um dicionário que contenha
    # Número de identificação da BYU-I e nomes dos estudantes.
    dic_de_estudantes = {
        # Número de identificação da BYU-I : Nome
        "751766201" : "Raimundo Nonato",
        "751762102" : "Acedina Fonseca",
        "052058203" : "Carlos Santos",
        "323021604" : "Ana Souza",
        "251041405" : "Pedro Almeida",
        "001152306" : "Juliana Costa",
        "182706207" : "Rafael Pereira",
        "124712708" : "Camila Rodrigues",
        "212505409" : "Lucas Fernandes"
    }
    # Chama a função escrever_dic que gravará
    # o arquivo de dicionário dos estudantes chamado "estudantes.csv".
    escrever_dic("estudantes.csv", dic_de_estudantes, lista_de_titulos, 0)
def escrever_dic(nomedoarquivo, dicionario, lista_de_titulos=None,
        indice_da_coluna_de_chaves=None):
    """Grava o conteúdo de um dicionário em um arquivo CSV.
    Parâmetros
        nomedoarquivo: o nome do arquivo CSV a ser escrito
        dicionário: o dicionário para escrever no arquivo CSV
        lista_de_titulos: uma lista que contém os títulos das colunas.
            se lista_de_titulos for None, esta função não
            gravará títulos no arquivo CSV.
        indice_da_coluna_de_chaves: o índice da coluna no arquivo
            CSV onde esta função deve gravar as chaves.
            Se indice_da_coluna_de_chaves for None, esta função
            não gravará as chaves no arquivo CSV.
    Retorno: nada
    """
    # Abre o arquivo de texto para escrita e armazena uma referência
    # para o arquivo aberto em uma variável chamada arquivo_csv.
    with open(nomedoarquivo, "wt", newline="") as arquivo_csv:
        # Usa o módulo csv para criar um objeto escritor
        # que gravará no arquivo CSV aberto.
        gravador = csv.writer(arquivo_csv)
        # Grava a lista_de_titulos no arquivo CSV.
        if lista_de_titulos is not None:
            gravador.writerow(lista_de_titulos)
        # Obtém cada par chave-valor do dicionário
        # e grave cada par em uma linha separada
        # no arquivo CSV.
        for chave, valor in dicionario.items():
            # Se um valor armazenado no dicionário for
            # uma lista (list em Python), faz uma cópia temporária do valor.
            # Caso contrário, cria uma lista que contenha o
            # valor.
            if isinstance(valor, list):
                lista_de_linhas = valor.copy()
            else:
                lista_de_linhas = [valor]
            # Se indice_da_coluna_de_chaves for um número inteiro, insere
            # a chave na lista_de_linhas para que esta
            # função grave a chave no arquivo CSV.
            if indice_da_coluna_de_chaves is not None:
                lista_de_linhas.insert(indice_da_coluna_de_chaves, chave)
            # Grava uma linha no arquivo CSV.
            gravador.writerow(lista_de_linhas)
# Chama main para iniciar este programa.
if __name__ == "__main__":
    main()

Resumo

Um arquivo de texto armazena palavras e números como texto legível por humanos. Para gravar texto em arquivo, seu programa deve primeiro abrir o arquivo chamando a função integrada open. Você deve gravar o código para abrir um arquivo em um bloco Python with porque o computador fechará o arquivo automaticamente quando o bloco with terminar, e você não precisará se lembrar de escrever o código para fechar o arquivo. Depois de aberto, o programa grava texto no arquivo, usando a função integrada print, especificando o arquivo no argumento file.

Um arquivo CSV é um arquivo de texto que contém linhas e colunas de dados. CSV é a sigla em inglês para Comma Separeted Values, que significa valores separados por vírgula. Dentro de cada linha em um arquivo CSV, os valores de dados são separados por vírgulas. Python inclui um módulo padrão chamado csv que nos ajuda a escrever facilmente código Python para gravar em um arquivo CSV.

Links Úteis: