Last active
June 27, 2021 20:29
-
-
Save marcelometal/d8411bb9a284ecb662849d5f7a929ebd to your computer and use it in GitHub Desktop.
Eleições 2020: Candidados
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright (c) 2020, Marcelo Jorge Vieira | |
// Licensed under the MIT License | |
package main | |
import ( | |
"encoding/csv" | |
"fmt" | |
"io" | |
"log" | |
"os" | |
"path/filepath" | |
) | |
// for YEAR in $(seq 2000 2020); do | |
// wget http://agencia.tse.jus.br/estatistica/sead/odsele/consulta_cand/consulta_cand_$YEAR.zip | |
// done | |
const BASE_DIR = "./consulta_cand_2020" | |
type Cand2020 struct { | |
DT_GERACAO string | |
HH_GERACAO string | |
ANO_ELEICAO string | |
CD_TIPO_ELEICAO string | |
NM_TIPO_ELEICAO string | |
NR_TURNO string | |
CD_ELEICAO string | |
DS_ELEICAO string | |
DT_ELEICAO string | |
TP_ABRANGENCIA string | |
SG_UF string | |
SG_UE string | |
NM_UE string | |
CD_CARGO string | |
DS_CARGO string | |
SQ_CANDIDATO string | |
NR_CANDIDATO string | |
NM_CANDIDATO string | |
NM_URNA_CANDIDATO string | |
NM_SOCIAL_CANDIDATO string | |
NR_CPF_CANDIDATO string | |
NM_EMAIL string | |
CD_SITUACAO_CANDIDATURA string | |
DS_SITUACAO_CANDIDATURA string | |
CD_DETALHE_SITUACAO_CAND string | |
DS_DETALHE_SITUACAO_CAND string | |
TP_AGREMIACAO string | |
NR_PARTIDO string | |
SG_PARTIDO string | |
NM_PARTIDO string | |
SQ_COLIGACAO string | |
NM_COLIGACAO string | |
DS_COMPOSICAO_COLIGACAO string | |
CD_NACIONALIDADE string | |
DS_NACIONALIDADE string | |
SG_UF_NASCIMENTO string | |
CD_MUNICIPIO_NASCIMENTO string | |
NM_MUNICIPIO_NASCIMENTO string | |
DT_NASCIMENTO string | |
NR_IDADE_DATA_POSSE string | |
NR_TITULO_ELEITORAL_CANDIDATO string | |
CD_GENERO string | |
DS_GENERO string | |
CD_GRAU_INSTRUCAO string | |
DS_GRAU_INSTRUCAO string | |
CD_ESTADO_CIVIL string | |
DS_ESTADO_CIVIL string | |
CD_COR_RACA string | |
DS_COR_RACA string | |
CD_OCUPACAO string | |
DS_OCUPACAO string | |
VR_DESPESA_MAX_CAMPANHA string | |
CD_SIT_TOT_TURNO string | |
DS_SIT_TOT_TURNO string | |
ST_REELEICAO string | |
ST_DECLARAR_BENS string | |
NR_PROTOCOLO_CANDIDATURA string | |
NR_PROCESSO string | |
CD_SITUACAO_CANDIDATO_PLEITO string | |
DS_SITUACAO_CANDIDATO_PLEITO string | |
CD_SITUACAO_CANDIDATO_URNA string | |
DS_SITUACAO_CANDIDATO_URNA string | |
ST_CANDIDATO_INSERIDO_URNA string | |
} | |
func WalkMatch(root, pattern string) ([]string, error) { | |
var matches []string | |
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { | |
if err != nil { | |
return err | |
} | |
if info.IsDir() { | |
return nil | |
} | |
matched, err := filepath.Match(pattern, filepath.Base(path)) | |
if err != nil { | |
return err | |
} else if matched { | |
matches = append(matches, path) | |
} | |
return nil | |
}) | |
if err != nil { | |
return nil, err | |
} | |
return matches, nil | |
} | |
func readCSVFile(filename string) []Cand2020 { | |
csvfile, err := os.Open( | |
fmt.Sprintf(filename), | |
) | |
if err != nil { | |
log.Fatalln("Couldn't open the CSV file", err) | |
} | |
r := csv.NewReader(csvfile) | |
r.Comma = ';' | |
var cands []Cand2020 | |
for { | |
record, err := r.Read() | |
if err == io.EOF { | |
break | |
} | |
if err != nil { | |
log.Fatal(err) | |
} | |
cand := Cand2020{ | |
DT_GERACAO: record[0], | |
HH_GERACAO: record[1], | |
ANO_ELEICAO: record[2], | |
CD_TIPO_ELEICAO: record[3], | |
NM_TIPO_ELEICAO: record[4], | |
NR_TURNO: record[5], | |
CD_ELEICAO: record[6], | |
DS_ELEICAO: record[7], | |
DT_ELEICAO: record[8], | |
TP_ABRANGENCIA: record[9], | |
SG_UF: record[10], | |
SG_UE: record[11], | |
NM_UE: record[12], | |
CD_CARGO: record[13], | |
DS_CARGO: record[14], | |
SQ_CANDIDATO: record[15], | |
NR_CANDIDATO: record[16], | |
NM_CANDIDATO: record[17], | |
NM_URNA_CANDIDATO: record[18], | |
NM_SOCIAL_CANDIDATO: record[19], | |
NR_CPF_CANDIDATO: record[20], | |
NM_EMAIL: record[21], | |
CD_SITUACAO_CANDIDATURA: record[22], | |
DS_SITUACAO_CANDIDATURA: record[23], | |
CD_DETALHE_SITUACAO_CAND: record[24], | |
DS_DETALHE_SITUACAO_CAND: record[25], | |
TP_AGREMIACAO: record[26], | |
NR_PARTIDO: record[27], | |
SG_PARTIDO: record[28], | |
NM_PARTIDO: record[29], | |
SQ_COLIGACAO: record[30], | |
NM_COLIGACAO: record[31], | |
DS_COMPOSICAO_COLIGACAO: record[32], | |
CD_NACIONALIDADE: record[33], | |
DS_NACIONALIDADE: record[34], | |
SG_UF_NASCIMENTO: record[35], | |
CD_MUNICIPIO_NASCIMENTO: record[36], | |
NM_MUNICIPIO_NASCIMENTO: record[37], | |
DT_NASCIMENTO: record[38], | |
NR_IDADE_DATA_POSSE: record[39], | |
NR_TITULO_ELEITORAL_CANDIDATO: record[40], | |
CD_GENERO: record[41], | |
DS_GENERO: record[42], | |
CD_GRAU_INSTRUCAO: record[43], | |
DS_GRAU_INSTRUCAO: record[44], | |
CD_ESTADO_CIVIL: record[45], | |
DS_ESTADO_CIVIL: record[46], | |
CD_COR_RACA: record[47], | |
DS_COR_RACA: record[48], | |
CD_OCUPACAO: record[49], | |
DS_OCUPACAO: record[50], | |
VR_DESPESA_MAX_CAMPANHA: record[51], | |
CD_SIT_TOT_TURNO: record[52], | |
DS_SIT_TOT_TURNO: record[53], | |
ST_REELEICAO: record[54], | |
ST_DECLARAR_BENS: record[55], | |
NR_PROTOCOLO_CANDIDATURA: record[56], | |
NR_PROCESSO: record[57], | |
CD_SITUACAO_CANDIDATO_PLEITO: record[58], | |
DS_SITUACAO_CANDIDATO_PLEITO: record[59], | |
CD_SITUACAO_CANDIDATO_URNA: record[60], | |
DS_SITUACAO_CANDIDATO_URNA: record[61], | |
ST_CANDIDATO_INSERIDO_URNA: record[62], | |
} | |
cands = append(cands, cand) | |
} | |
return cands | |
} | |
func main() { | |
var allCands []Cand2020 | |
files, err := WalkMatch(BASE_DIR, "*.csv") | |
if err != nil { | |
log.Fatal("booom!") | |
} | |
for _, file := range files { | |
cands := readCSVFile(file) | |
allCands = append(allCands, cands...) | |
fmt.Println("Processing...", file) | |
} | |
fmt.Println("len=>", len(allCands)) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment