Skip to content
Snippets Groups Projects
Commit b1729806 authored by Jomaro Rodrigues's avatar Jomaro Rodrigues
Browse files

Aparentemente finalizado

Mas não consigo fazer mais testes
parents
No related branches found
No related tags found
No related merge requests found
ADEGA-CRYPT
===========
Usage
-----
ENCRIPTAR
$ adega-crypt.py -e relatorio.csv
DESENCRIPTAR
$ adega-crypt.py -d relatorio.csv
#!/usr/bin/env python
# coding: utf-8
import sys
import pandas as pd
import numpy as np
import os
TABLE_FILE = os.path.join(os.getenv("HOME"), r".local/share/adega-crypt/correspondences.csv")
def usage():
print("""Esse é um script para mascarar os relatórios de SIE retirando deles os GRR's e nomes dos alunos
Essas informações serão substituidas por numeros sequenciais e a relação entre
os números sequênciais e os valores reais será guardada em um arquivo na home do usuário
USO
ENCRIPTAR
$ %s -e relatorio.csv
DESENCRIPTAR
$ %s -d relatorio.csv
""")
def crypt(name):
data = pd.read_csv(name)
if os.path.exists(TABLE_FILE):
table = pd.read_csv(TABLE_FILE)
else:
dirname = os.path.dirname(TABLE_FILE)
if not os.path.exists(dirname):
os.makedirs(dirname)
table = pd.DataFrame(columns=["ID", "MATR_ALUNO", "NOME_ALUNO"])
table.to_csv(TABLE_FILE, index=False)
#
# filtra os registros pra não pegar duplicados
#
table_append = data[["MATR_ALUNO"]].drop_duplicates().reset_index(drop=True)
#
# se o novo relatório inclui o nome dos alunos vamos colocar isso
# no arquivo de correspondencia tambem
#
if "NOME_ALUNO" in data.columns:
table_append = pd.merge(table_append, data[["MATR_ALUNO", "NOME_ALUNO"]], how="left", on="MATR_ALUNO")
UTF8toupper = lambda s: s.decode("utf8").upper().encode("utf8")
table_append["NOME_ALUNO"] = table_append.NOME_ALUNO.apply(UTF8toupper)
else:
table_append["NOME_ALUNO"] = ""
# pega todos os registros que ainda não existem no table
table_append = table_append[~table_append["MATR_ALUNO"].isin(table["MATR_ALUNO"])]
if table_append.shape[0] < 0:
#
# Atualiza o table com os registros que ainda não existem
#
table_append["ID"] = table.shape[0] + np.arange(table_append.shape[0])
# atualiza o table com os registros que ainda não existem nele
table = pd.concat([table, table_append])
# escreve o table atualizado no disco
table.to_csv(TABLE_FILE, index=False)
#
# tira as colunas que tem os dados verdadeiros
# e coloca a coluna de dados falsos no lugar
#
data = pd.merge(data, table[["MATR_ALUNO", "ID"]], how="left", on="MATR_ALUNO")
del data["MATR_ALUNO"]
if "NOME_ALUNO" in data.columns:
del data["NOME_ALUNO"]
data.rename(columns={"ID": "MATR_ALUNO"}, inplace=True)
#
# monta o nome do novo arquivo
#
split_name = name.split(".")
if split_name[-2] == "decripted":
split_name[-2] = "encripted"
else:
split_name[-1] = "encripted"
split_name.append("csv")
#
# escreve o arquivo
#
data.to_csv(".".join(split_name), index=False)
return data
def decrypt(name):
data = pd.read_csv(name)
table = pd.read_csv(TABLE_FILE)
data.rename(columns={"MATR_ALUNO": "ID"}, inplace=True)
data = pd.merge(data, table, how="left", on="ID")
del data["ID"]
split_name = name.split(".")
if split_name[-2] == "encripted":
split_name[-2] = "decripted"
else:
split_name[-1] = "decripted"
split_name.append("csv")
data.to_csv(".".join(split_name), index=False)
return data
if __name__ == "__main__":
if len(sys.argv) < 3:
usage()
else:
if sys.argv[1] == "-e":
map(crypt, sys.argv[2:])
elif sys.argv[1] == "-d":
map(decrypt, sys.argv[2:])
else:
usage()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment