Arquivos CSV em Python
Um dos formatos de arquivo mais comuns para armazenar informações de forma organizada é o CSV (Comma Separated Values). Em um arquivo CSV, cada linha representa um registro composto por várias colunas, separadas por vírgulas. Embora seja um formato de arquivo de texto, o Python facilita seu uso com um módulo embutido específico: csv.
Vamos explorar o uso desse módulo com um exemplo:
import csv
FILENAME = "users.csv"
users = [
["Tom", 28],
["Alice", 23],
["Bob", 34]
]
with open(FILENAME, "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(users)
with open(FILENAME, "a", newline="") as file:
user = ["Sam", 31]
writer = csv.writer(file)
writer.writerow(user)Neste exemplo, gravamos uma lista bidimensional em um arquivo, criando uma tabela onde cada linha representa um usuário, com dois campos: nome e idade. Assim, formamos uma tabela com três linhas e duas colunas inicialmente.
Ao abrir o arquivo para escrita, usamos o parâmetro newline="" para evitar problemas de quebra de linha, independentemente do sistema operacional.
Para gravar os dados, obtemos um objeto writer, criado pela função csv.writer(file), que recebe o arquivo aberto como parâmetro. A gravação ocorre com o método writer.writerows(users), que recebe uma lista de linhas (neste caso, uma lista bidimensional).
Caso seja necessário adicionar apenas uma linha, como ["Sam", 31], podemos usar o método writer.writerow(user).
Após a execução do script, o arquivo users.csv terá o seguinte conteúdo:
Tom,28 Alice,23 Bob,34 Sam,31
Para ler os dados do arquivo, criamos um objeto reader:
import csv
FILENAME = "users.csv"
with open(FILENAME, "r", newline="") as file:
reader = csv.reader(file)
for row in reader:
print(row[0], "-", row[1])Com o objeto reader, podemos iterar por todas as linhas do arquivo e exibir o conteúdo de cada registro:
Tom - 28 Alice - 23 Bob - 34 Sam - 31
Trabalhando com Dicionários
No exemplo anterior, cada linha era representada por uma lista, como ["Sam", 31]. No entanto, o módulo csv também oferece suporte para trabalhar com dicionários. A função csv.DictWriter() cria um objeto writer para gravar dados como dicionários, e csv.DictReader() cria um reader para leitura nesse formato. Vejamos um exemplo:
import csv
FILENAME = "users2.csv"
users = [
{"name": "Tom", "age": 28},
{"name": "Alice", "age": 23},
{"name": "Bob", "age": 34}
]
with open(FILENAME, "w", newline="") as file:
columns = ["name", "age"]
writer = csv.DictWriter(file, fieldnames=columns)
writer.writeheader()
# Gravação de várias linhas
writer.writerows(users)
# Gravação de uma linha
user = {"name": "Sam", "age": 41}
writer.writerow(user)Na gravação de dicionários, especificamos os nomes das colunas usando o parâmetro fieldnames, e o cabeçalho é gravado com writeheader(). Assim, o arquivo users2.csv terá colunas com cabeçalho ("name" e "age").
Para leitura, o uso de csv.DictReader() permite acessar os valores de cada linha pelo nome das colunas, como row["name"]:
with open(FILENAME, "r", newline="") as file:
reader = csv.DictReader(file)
for row in reader:
print(row["name"], "-", row["age"])Neste exemplo, cada linha do arquivo é lida como um dicionário, e podemos acessar os valores diretamente pelos nomes das colunas, facilitando a leitura e manipulação dos dados.
Documentação oficial: