Skip to content

juntaDados() falha no Windows por causa do arquivo desktop.ini #54

@marcofaga

Description

@marcofaga

Estava rodando o elections_tse para pegar votação por zona e estava dando o seguinte erro para qualquer ano tentado:

Error in `data.table::rbindlist()`:
! Item 2 has 38 columns, inconsistent with item 1 which has 1 columns. To fill missing columns use fill=TRUE.
Hide Traceback1. ├─base::lapply(...)
 2. │ └─global FUN(X[[i]], ...)
 3. │   └─electionsBR::elections_tse(year = ano, type = "vote_mun_zone")
 4. │     └─electionsBR:::vote_mun_zone(...)
 5. │       └─electionsBR:::juntaDados(uf, encoding, br_archive)
 6. │         └─... %>% dplyr::as_tibble()
 7. ├─dplyr::as_tibble(.)
 8. └─data.table::rbindlist(.)

Fiz um debug e descobri que havia o problema acontecia dentro da função juntaDados(). Descobri que quando ele lista os arquivos csvs a serem juntados na pasta criada (e onde os arquivos do TSE são baixados), o primeiro elemento da lista acabava sendo o arquivo de sistema desktop.ini. A função interna juntaDados() utiliza a função Sys.glob("*") para listar arquivos no diretório e a lógica de filtragem atual permite que o desktop.ini seja incluído no objeto archive. Como esse arquivo não possui o formato esperado (não é um csv) a função gera um erro ao tentar processá-lo como um arquivo de dados e juntar ao segundo arquivo.

O filtro existente busca excluir arquivos .pdf e validar o tamanho do arquivo, mas o desktop.ini passa por essas validações.

# Lógica atual com o erro
archive <- Sys.glob("*")[grepl(".pdf", Sys.glob("*")) == FALSE] %>%
    .[grepl(uf, .)] %>%
    file.info() %>%
    .[.$size > 200, ] %>%
    row.names()

Sugiro adicionar um filtro explícito para excluir o arquivo desktop.ini, utilizando ignore.case = TRUE para garantir a compatibilidade, já que o Windows não diferencia maiúsculas de minúsculas.

# Lógica corrigida
archive <- Sys.glob("*")[grepl(".pdf", Sys.glob("*")) == FALSE] %>%
    .[grepl("desktop\\.ini", ., ignore.case = TRUE) == FALSE] %>% # Filtro adicional
    .[grepl(uf, .)] %>%
    file.info() %>%
    .[.$size > 200, ] %>%
    row.names()

Não sei se esse é um problema geral, ou se acontece apenas no meu computador. De qualquer forma, fica a sugestão.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions