# Autor: Vaclav Hejret # C2184 Uvod do programovani v Pythonu # Domaci ukol 07 from glob import glob #inicializace pole pro vystup, do ktereho rovnou pridam prvni radku, hlavicku csv souboru output_file = [["Molecule ID","energy (hartree)","energy (kcal/mol)","cpu time (s)"]] #otevreni souboru pro zapis citatu citat_file = open("citat_file.csv","w") #pro kazdy souboru ve slozce homework08, ktery ma priponu .log for filename in glob("./homework08/*.log"): #inicializace promennych a take switche start pro vyhledani citatu energy_H = 0.0 time_list = [] citat = [] start = False #otevre soubor with open(filename) as log_file: #prochazi vsechny radky for line in log_file: #pokud je SCF Done v radku if "SCF Done" in line: #radek rozdeli a do promenne ulozi patou hodnotu v radku, energii energy_H = line.strip().split()[4] #pokud je Job cpu time: v radku, ulozi do listu vsechnz 4 udaje o casu elif "Job cpu time:" in line: time_list.append(line.strip().split()[3]) time_list.append(line.strip().split()[5]) time_list.append(line.strip().split()[7]) time_list.append(line.strip().split()[9]) start = False #pokud je @ v radku (vzdy pred citatem) elif "@" in line: #prepne rozpoznavaci switch na True start = True # a muze se vykonat podminka pro nacteni citatu elif start: #podminka, ktera kontroluje, yda neni radek prazdny if len(line.split()) != 0: #pokud neni, co citatu prida postupne vsechny neprazdne radky citat.append(line) #na konci cteni molekuly prida prazdny radek do citatu citat.append("\n") #pro kazdy prvek v listu citat for line in citat: #zapise do souboru citat_file citat_file.write(line) # uprava promenne filename pro vypis do souboru molecule_id = filename.replace("./homework08/","").replace(".log","") #prepocet energie z Hartree do kcal a zmena formatu kcal_energy = '{:1.6e}'.format(float(energy_H) * 627.503) #vypocet casu vynasobenim jednotlivych polozek na vteriny time = float(time_list[0]) * 86400 + float(time_list[1]) * 3600 + float(time_list[2]) * 60 + float(time_list[3]) #pridani celeho radku jako tuple do noveho listu pro vypis output_file.append([molecule_id,str(energy_H),str(kcal_energy),str(time)]) #otevreni souboru pro zapis csv csv_file = open("csv_file.csv","w") #pro kazdy tuple v listu pro zapis for entry in output_file: #zapise do csv souboru prvky v tuplu spojene strednikem a pridan konec radku csv_file.write(";".join(entry) + "\n") #zavreni obou souboru csv_file.close() citat_file.close() #zapis souboru by sel implementovat primo do cyklu