Aparentemente, seria fácil ir escrevendo os dados com o nosso módulo de gravação, apenas usando a função adicionar. Porém, a função write somente admite como arqumento strings, o que não nos permite uma gestão adequada das quebras de linha nem nos permite gravar diretamente uma lista com as variáveis.
É justamente esse o papel da biblioteca csv, que está na base da função que definimos, e que tem duas funções que nos interessam. Foi com base nela que criamos as funções de escrever cabeçalho e linhas, no módulo dsd.py.
- A função csv.writer transforma o elemento aberto pela função open (cujo conteúdo é do tipo TextIOWrapper) em um outro tipo de elemento (do tipo writer), que admite a gravação de listas (e não apenas de strings).
- A função writerow, que realiza a gravação de uma lista (ou de strings), seguida por uma quebra de linha, o que gera um arquivo CSV.
O código dos módulos de gravação é semelhante, e por isso coloco ambos lado a lado para serem visíveis as diferenças.
# Módulo básico de gravação
nomedoarquivo = 'ADIhtml\\ADI' + NumProcesso + '.html'
arquivoaberto = open(nomedoarquivo, 'w', encoding='utf-8')
arquivoaberto.write(url)
arquivoaberto.close() ### gravação dos dados em csv
nomedoarquivo = "ADI.csv"
arquivoaberto = open(nomedoarquivo, mode='a+', encoding="utf-8", newline='')
arquivoaberto_csv = csv.writer(arquivoaberto, delimiter=',')
arquivoaberto_csv.writerow(dados)
arquivoaberto.close()
Observando as diferenças entre ambos, você deve notar alguns pontos relevantes:
- a necessidade de importar a biblioteca csv, para poder usar o comando csv.writer;
- o mode da função open deve ser "a" (adicionar) ou "a+" (adicionar ou ler);
- sem o parâmetro newline="", o writerow insere um comando que o Excel interpreta como uma linha extra vazia em cada gravação;
- usamos o writerow em vez do write, para poder gravar a lista com os conteúdos dos atributos de cada processo.