-
Notifications
You must be signed in to change notification settings - Fork 0
/
Extract_ChemCraft_v1_0.py
139 lines (114 loc) · 4.23 KB
/
Extract_ChemCraft_v1_0.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
# 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 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 valor_s * 10 ** base
elif sinal_base == '-':
return valor_s * 1/(10 ** base)
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 a coluna: ")
if val1 == 'exit':
print('Você decidiu sair, até mais, Obrigado!')
exit()
val2 = input("Digite a linha: ")
if val2 == 'exit':
print('Você decidiu sair, até mais, Obrigado!')
exit()
finally:
if val1 == 'exit' or val2 == 'exit':
exit()
Resultado = funcao_calc(val1,val2)
if Resultado:
print('O elemento encontrado foi:', Resultado,'\n-->>' , func_convert(Resultado))
# CHAMANDO OS INPUTS PARA ENTRADA DE DADOS!
Inputs()