-
Notifications
You must be signed in to change notification settings - Fork 0
/
csv Manager.py
139 lines (135 loc) · 7.8 KB
/
csv Manager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"""
Gerador e gerenciador de arquivos csv
Esse programa tem o objetivo de permitir que o usúario crie e edite um arquivo csv
para utilizá-lo, principalmente, como um datalogger ou em uma planilha do excel.
O que são arquivos csv(comma-separated values)?
O CSV é uma implementação particular de arquivos de texto separados por um delimitador,
que usa a vírgula e a quebra de linha para separar os valores. O formato também usa as
aspas em campos no qual são usados os caracteres reservados (vírgula e quebra de linha).
Essa robustez no formato torna o CSV mais amplo que outros formatos digitais do mesmo
segmento.
"""
opc='s' #Diz se o usuário deseja continuar o programa
while opc == 's':
#Opções que o programa oferece
print('1 - Exibir dados da tabela csv')
print('2 - Deletar registro')
print('3 - Adicionar registro')
print('4 - Buscar registro')
print('5 - Gerar arquivo csv')
esc = int(input('')) #Escolha do usuário
while esc >5 or esc<1: #Verifica se o usuário fez uma escolha válida
esc = int(input('Opçāo inválida digite outra opçāo:'))
if esc == 1: #imprime os registros
arq = open('dbcsv.csv','r')
registros = arq.readlines() #Lê e armazena todas as linhas do arquivo csv em uma lista(cada linha como um elemento)
arq.close()
#Imprime os registros do arquivo csv formatados e alinhados
commafound = True #variável que verifica se a lista registros ainda possui elementos com vírgula
while(commafound):
commapos = 0 #Index da posição da vírgula no registro onde a vírgula está na maior posição em relação aos outros registros
commafound = False
#Verifica se os registros possuem vírgulas e atualiza commapos para o index da posição da vírgula de um dos registros
for registro in registros:
if registro.find(',') != -1 and commapos < registro.find(','):
commafound = True
commapos = registro.find(',')
#------------------------------------------------------------------------------
if not commafound: break #Checa se algum registro ainda possui vírgulas e se não sai do while
#Coloca a vírgula de todos os registros no mesmo index, preenchendo os índices vazios com espaço, por fim substitue as vírgulas por uma barra reta
for i in range(len(registros)):
registro = registros[i]
if registros[i].find(',') !=-1 and registros[i].find(',') < commapos:
registro = registro[0:registro.find(','):1] + (' '*(commapos-registro.find(','))) + registro[registro.find(',')::]
registro = registro.replace(',','|',1)
registros.pop(i)
registros.insert(i,registro)
#-------------------------------------------------------------------------------
for registro in registros: # imprime todos os registros
registro = registro.replace(',','|')
print(registro,end='')
#---------------------------------------------------------------------------------
if esc == 2 or esc == 4: #Busca ou deleta registros
arq = open('dbcsv.csv','r')
registros = arq.readlines()
arq.close()
regprint = registros.copy() #Variável para trabalhar na formatação dos registros
chaves = registros[0] #Chaves da tabela csv
chaves = chaves.split(',') #Cada chave se transforma no elemento de uma lista
for i in range(len(chaves)):
chaves[i] = chaves[i].lower()
chaves[i] = chaves[i].replace('\n','')
registros.pop(0) #retira as chaves da lista registros
for i in range(len(registros)): registros[i] = registros[i].lower().split(',') #Os registros são separados em chaves(sendo cada chave o elemento de uma lista) e transformados em minúsculos
chave = input('Digite o nome da chave que será utilizada para a busca do registro:')
chave = chave.lower()
while not (chave in chaves):
chave = input('Digite o nome da chave que será utilizada para a busca do registro:')
chave = chave.lower()
chavepos = chaves.index(chave) #Posição da chave que será utilizada na busca dos registros
regfound = False #Variável que indica se o(s) registros foram encontrados
if esc == 2: #Deleta um registro
item = input('Digite o nome do item que quer deletar:').lower()
#Deleta um registro e atualiza o arquivo csv, além de imprimir o registro que foi deletado
for i in range(len(registros)):
registro = registros[i]
if registro[chavepos].replace('\n','') == item:
regfound = True
strprint = regprint.pop(i+1).replace(',','|')
strprint = strprint.replace('\n','')
print(strprint + ' - Registro deletado')
arq = open('dbcsv.csv','w')
for regp in regprint: arq.write(regp)
arq.close()
break
#------------------------------------------------------------------------------
else: #Pesquisa registros
item = input('Digite o nome do item que quer pesquisar:').lower()
for i in range(len(registros)): #Busca os registros e os imprime na tela
registro = registros[i]
if registro[chavepos].replace('\n','') == item:
regfound = True
print(regprint[i+1].replace(',','|'))
if regfound: print('Registro localizado com sucesso')
else: print('Nenhum registro com esse item foi encontrado')
if esc == 3: #Adiciona registros no arquivo csv
arq = open('dbcsv.csv','r')
chaves= arq.readline().split(',') #Chaves separadas em uma lista
arq.close()
print('Digite o nome dos itens das chvaves sem o uso de vírgulas e nem aspas')
arq = open('dbcsv.csv','a')
nome_chave = input("Digite o/a " + chaves[0].replace('\n','') + ":") # Nome do item da chave
nome_chave = nome_chave.replace(',','')
nome_chave = nome_chave.replace("'",'')
nome_chave = nome_chave.replace('"','')
arq.write(nome_chave)
chaves.pop(0) #Remove a primeira chave
for chave in chaves: #Pede ao usuário o nome dos itens do resto das chaves e adiciona os itens ao arquivo csv
nome_chave = input("Digite o/a " + chave.replace('\n','') + ":")
nome_chave = nome_chave.replace(',','')
nome_chave = nome_chave.replace("'",'')
nome_chave = nome_chave.replace('"','')
arq.write(',')
arq.write(nome_chave)
arq.write('\n')
arq.close()
if esc == 5: #Cria um arquivo csv
print('Digite as chaves do banco de dados(sem utilizar aspas e nem vírgulas)')
arq = open('dbcsv.csv','w')
chave = input('Digite o nome da chave:')
chave = chave.replace(',','')
chave = chave.replace("'",'')
chave = chave.replace('"','')
arq.write(chave)
opcdb = input('Deseja criar mais chaves S/N? ').strip().lower()
while opcdb == 's': #Pede o nome das chaves da tabela csv e as adiciona ao arquivo
arq.write(',')
chave = input('Digite o nome da chave:')
chave = chave.replace(',','')
chave = chave.replace("'",'')
chave = chave.replace('"','')
arq.write(chave)
opcdb = input('Deseja criar mais chaves S/N? ').strip().lower()
arq.write('\n')
arq.close()
opc = input('Deseja continuar o programa S/N? ').strip().lower()