Arquivos CSV - 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
csv.writer(file)
writer.writerows(users)
Caso seja necessário adicionar apenas uma linha, como ["Sam", 31]
writer.writerow(user)
Após a execução do script, o arquivo users.csv
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
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]
csv
csv.DictWriter()
csv.DictReader()
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
writeheader()
users2.csv
Para leitura, o uso de csv.DictReader()
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.