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 csv
Linguagem 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 csv
mó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 for
loop:
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 with
instruçã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.csv
arquivo 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:
A seguir mostramos como ler o country.csv
arquivo 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.csv
tem 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_no
for 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.csv
arquivo 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.9
Linguagem 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 comoline['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 DictReader
classe entra em jogo. A classe DictReader também vem do csv
módulo.
A DictReader
classe 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 DictReader
classe, você pode acessar valores no country.csv
arquivo como line['name']
, line['area']
, line['country_code2']
e line ['country_code3']
.
O exemplo a seguir usa a DictReader
classe para ler o country.csv
arquivo:
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 DictReader
construtor.
Resumo
- Use
csv.reader()
função oucsv.DictReader
classe para ler dados de um arquivo CSV.