Arquivo CSV de leitura Python

Resumo : neste tutorial, você aprenderá como ler um arquivo CSV em Python usando o módulo integrado csv.

O que é um arquivo CSV

CSV significa valores separados por vírgula. Um arquivo CSV é um arquivo de texto delimitado que usa vírgula para separar valores.

Um arquivo CSV consiste em uma ou mais linhas. Cada linha é um registro de dados. E cada registro de dados consiste em um ou mais valores separados por vírgulas. Além disso, todas as linhas de um arquivo CSV possuem o mesmo número de valores.

Normalmente, você usa um arquivo CSV para armazenar dados tabulares em texto simples. O formato de arquivo CSV é bastante popular e suportado por muitos aplicativos de software, como Microsoft Excel e Google Spreadsheet.

Lendo um arquivo csv em Python

Para ler um arquivo CSV em Python, siga estas etapas:

Primeiro, importe o módulo csv:

import csvLinguagem de código:  Python  ( python )

Em segundo lugar, abra o arquivo CSV usando a função open() integrada no modo de leitura:

f = open('path/to/csv_file')Linguagem de código:  Python  ( python )

Se o CSV contiver caracteres UTF8, você precisará especificar a codificação assim:

f = open('path/to/csv_file', encoding='UTF8')Linguagem de código:  Python  ( python )

Terceiro, passe o objeto de arquivo ( f) para a reader()função do csvmódulo. A reader()função retorna um objeto leitor csv:

csv_reader = csv.reader(f)Linguagem de código:  Python  ( python )

O csv_readeré um objeto iterável de linhas do arquivo CSV. Portanto, você pode iterar nas linhas do arquivo CSV usando um forloop:

for line in csv_reader:
    print(line)Linguagem de código:  Python  ( python )

Cada linha é uma lista de valores. Para acessar cada valor, você usa a notação de colchetes []. O primeiro valor possui índice 0. O segundo valor possui índice 1 e assim por diante.

Por exemplo, o seguinte acessa o primeiro valor de uma linha específica:

line[0]Linguagem de código:  Python  ( python )

Por fim, sempre feche o arquivo quando não tiver mais acesso a ele, chamando o close()método do objeto arquivo:

f.close()    Linguagem de código:  Python  ( python )

Será mais fácil usar a withinstrução para que você não precise chamar explicitamente o close()método.

A seguir ilustramos todas as etapas para ler um arquivo CSV:

import csv

with open('path/to/csv_file', 'r') as f:
    csv_reader = csv.reader(f)
    for line in csv_reader:
        # process each line
        print(line)
Linguagem de código:  Python  ( python )

Lendo exemplos de arquivos CSV

Usaremos o country.csvarquivo que contém informações do país, incluindo nome, área, código do país de 2 letras, código do país de 3 letras:

Exemplo de arquivo CSV de leitura em Python

Baixe o arquivo country.csv

A seguir mostramos como ler o country.csvarquivo e exibir cada linha na tela:

import csv

with open('country.csv', encoding="utf8") as f:
    csv_reader = csv.reader(f)
    for line in csv_reader:
        print(line)Linguagem de código:  Python  ( python )

Saída:

['name', 'area', 'country_code2', 'country_code3']
['Afghanistan', '652090.00', 'AF', 'AFG']
['Albania', '28748.00', 'AL', 'ALB']
['Algeria', '2381741.00', 'DZ', 'DZA']
['American Samoa', '199.00', 'AS', 'ASM']
...
Linguagem de código:  Python  ( python )

O country.csvtem a primeira linha como cabeçalho. Para separar o cabeçalho e os dados, você usa a enumerate()função para obter o índice de cada linha:

import csv

with open('country.csv', encoding="utf8") as f:
    csv_reader = csv.reader(f)
    for line_no, line in enumerate(csv_reader, 1):
        if line_no == 1:
            print('Header:')
            print(line)  # header
            print('Data:')
        else:
            print(line)  # data
Linguagem de código:  Python  ( python )

Neste exemplo, usamos a enumerate()função e especificamos o índice da primeira linha como 1.

Dentro do loop, se line_nofor 1, a linha é o cabeçalho. Caso contrário, é uma linha de dados.

Outra maneira de pular o cabeçalho é usar a next()função. A next()função encaminha ao leitor para a próxima linha. Por exemplo:

import csv

with open('country.csv', encoding="utf8") as f:
    csv_reader = csv.reader(f)

    # skip the first row
    next(csv_reader)

    # show the data
    for line in csv_reader:
        print(line)
Linguagem de código:  Python  ( python )

O seguinte lê o country.csvarquivo e calcula as áreas totais de todos os países:

import csv

total_area = 0

# calculate the total area of all countries

with open('country.csv', encoding="utf8") as f:
    csv_reader = csv.reader(f)

    # skip the header
    next(csv_reader)

    # calculate total
    for line in csv_reader:
        total_area += float(line[1])

print(total_area)Linguagem de código:  Python  ( python )

Saída:

148956306.9Linguagem de código:  Python  ( python )

Lendo um arquivo CSV usando a classe DictReader

Ao usar a csv.reader()função, você pode acessar os valores do arquivo CSV usando a notação de colchetes, como line[0], line[1]e assim por diante. No entanto, o uso da csv.reader()função tem duas limitações principais:

  • Primeiro, a forma de acessar os valores do arquivo CSV não é tão óbvia. Por exemplo, line[0]implicitamente significa o nome do país. Seria mais expressivo se você pudesse acessar o nome do país como line['country_name'].
  • Segundo, quando a ordem das colunas do arquivo CSV é alterada ou novas colunas são adicionadas, você precisa modificar o código para obter os dados corretos.

É aqui que a DictReaderclasse entra em jogo. A classe DictReader também vem do csvmódulo.

A DictReaderclasse permite criar um objeto como um leitor CSV normal. Mas mapeia as informações de cada linha para um dicionário ( dict) cujas chaves são especificadas pelos valores da primeira linha.

Ao usar a DictReaderclasse, você pode acessar valores no country.csvarquivo como line['name'], line['area'], line['country_code2']e line ['country_code3'].

O exemplo a seguir usa a DictReaderclasse para ler o country.csvarquivo:

import csv

with open('country.csv', encoding="utf8") as f:
    csv_reader = csv.DictReader(f)
    # skip the header
    next(csv_reader)
    # show the data
    for line in csv_reader:
        print(f"The area of {line['name']} is {line['area']} km2")
Linguagem de código:  Python  ( python )

Saída:

The area of Afghanistan is 652090.00 km2
The area of Albania is 28748.00 km2
The area of Algeria is 2381741.00 km2        
...
Linguagem de código:  Python  ( python )

Se você quiser ter nomes de campos diferentes daqueles especificados na primeira linha, você pode especificá-los explicitamente passando uma lista de nomes de campos para o DictReader()construtor como esta:

import csv

fieldnames = ['country_name', 'area', 'code2', 'code3']

with open('country.csv', encoding="utf8") as f:
    csv_reader = csv.DictReader(f, fieldnames)
    next(csv_reader)
    for line in csv_reader:
        print(f"The area of {line['country_name']} is {line['area']} km2")
Linguagem de código:  Python  ( python )

Neste exemplo, em vez de usar valores da primeira linha como nomes de campos, passamos explicitamente uma lista de nomes de campos para o DictReaderconstrutor.

Resumo

  • Use csv.reader()função ou csv.DictReaderclasse para ler dados de um arquivo CSV.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *