-
Notifications
You must be signed in to change notification settings - Fork 0
/
Extract_ChemCraft_v1_1.py
162 lines (131 loc) · 5.05 KB
/
Extract_ChemCraft_v1_1.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Tentando abrir o arquivo para análise de dados
try:
arquivo = input("\nDigite o nome do arquivo:")
# Abrindo o arquivo para leitura
arq1 = open(arquivo, "r", encoding='utf8')
except IOError:
print('Arquivo não encontrado, favor digitá-lo corretamente!')
exit()
# Retornando ao início da linha do arquivo
arq1.seek(0)
# Armazenando aquivo numa variável
data_arq1 = arq1.read()
# Localizando texto de início de extração
d_inicio = data_arq1.find(' Total nuclear spin-spin coupling J (Hz): ')+43
#print(d_inicio)
# Localizando texto do final da extração
d_final = data_arq1.find('End of Minotr F.D. properties file',d_inicio,len(data_arq1))-2
#print(d_final)
# Salva os dados coletados
dados_coletados = data_arq1[d_inicio:d_final]
#print(dados_coletados)
# Removendo os espaços e esplitando por linha
data_arq2 = dados_coletados
data_arq2 = data_arq2.replace(' \n', ',#\n')
data_arq2 = data_arq2.replace(' -', ',-')
data_arq2 = data_arq2.replace(' ', '')
data_arq2 = data_arq2.replace(' ', ',')
data_arq2 = data_arq2.replace(' ', '')
#print(data_arq2)
# Agora esplitando por vírgula
data_split = data_arq2.split('\n')
#print(data_split)
full_data = []
for row in data_split:
split_row = row.split("\n")
split2=[]
for i in split_row:
split2 = i.split(",")
full_data.append(split2)
#print(full_data)
# Imprimindo o último dado bruto
for i in full_data:
print(i)
# Abrindo e gravando o arquivo de log
with open(arquivo+'_log.txt','w') as arquivo:
for i in full_data:
arquivo.write(str(i)+'\n')
# ------------------ Função para localizar o elemnto segundo a coluna e linha
def funcao_calc(coluna,linha):
try:
end_linha = 0
end_coluna = 0
valor = ''
b_col = False
b_lin = False
#Procurando a coluna
for i in full_data:
for z in i:
if z == coluna and '#' in i:
print('Coluna:',i)
end_coluna = i.index(z) # Endereço da coluna
end_linha = full_data.index(i) # Endereço da linha da coluna
b_col = True
#Procurando a linha
for i in full_data:
if full_data.index(i) > end_linha:
if '#' in i: # Se encontrar a proxima linha de colunas encerra a procura
break
elif i[0] == linha: # Se localinzar a linha solicitada
print('Linha',i)
valor = i[end_coluna+1]
b_lin = True
if b_col and b_lin: # Só retorna valor se encontrar colune e linha
return valor
else:
print('Coluna ou linha não encontrada!')
except IndexError:
print ("Erro: O valor solicitado não pertence a linha correspendente!")
else:
print ("Erro: O valor solicitado não pode ser encontrado na tabela!")
# ------------------ Função para calcular a lista de elementos
def funcao_list(list_res):
lista = list_res.split(",")
if len(lista) % 2 != 0:
return print('A lista de valores estão incompletos, favor preencher corretamente!')
else:
result_geral = []
for i in lista:
if lista.index(i) % 2 ==0:
print('\nColuna:', i)
print('Linha:', lista[lista.index(i)+1])
result = funcao_calc(i,lista[lista.index(i)+1])
if result:
val_final = func_convert(result)
print('O elemento encontrado foi:', result,'\n-->>' , val_final)
result_geral.append(val_final)
else:
print('Os valores digitados não estão corretos, favor verificar!')
break
print('\nA lista de valores encontrados foram:')
for i in result_geral:
print(i, end = " ")
print('')
# ------------------ Função que converte a string em valor decimal
def func_convert(string):
try:
valor_s = float(string[:-4])
base = int(string[-2:])
sinal_base = string[-3]
if sinal_base == '+':
return round(valor_s * 10 ** base,len(string[:-4]))
elif sinal_base == '-':
return round(valor_s * 1/(10 ** base),len(string[:-4]))
except ValueError:
print ("Erro: O valor não pode ser convertido!")
else:
print ("Erro: O valor não pode ser convertido!")
# ------------------ Função para entrada de dados
def Inputs():
while True:
try:
val1 = input("\nDigite os valores de coluna e linha separado por vírgula:\n")
if val1 == 'exit':
print('Você decidiu sair, até mais, Obrigado!')
exit()
finally:
if val1 == 'exit':
exit()
funcao_list(val1)
# CHAMANDO OS INPUTS PARA ENTRADA DE DADOS!
Inputs()