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.

  1. 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).
  2. 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()
Módulo básico de gravação
    ### 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:

  1. a necessidade de importar a biblioteca csv, para poder usar o comando csv.writer;
  2. o mode da função open deve ser "a" (adicionar) ou "a+" (adicionar ou ler);
  3. sem o parâmetro newline="", o writerow insere um comando que o Excel interpreta como uma linha extra vazia em cada gravação;
  4. usamos o writerow em vez do write, para poder gravar a lista com os conteúdos dos atributos de cada processo.