CHEM-A2600 - Kemiantekniikan ohjelmointikurssi, Luento-opetus, 1.11.2021-10.12.2021
Kurssiasetusten perusteella kurssi on päättynyt 10.12.2021 Etsi kursseja: CHEM-A2600
Python-oppimateriaali (CHEM-A2600)
Tiedostojen helppo käsittely NumPy:llä
NumPy-kirjasto sisältää käteviä funktioita tiedostojen käsittelyyn. Nämä ovat hyödyllisiä etenkin numeerista dataa luettaessa. Tekstitiedostoja voi lukea ja kirjoittaa numpy.loadtxt- ja numpy.savetxt-funktioilla. Tarkastellaan esimerkkiä, jossa meillä on tilavuus- ja painedataa tiedostossa painedata.txt seuraavassa muodossa (kommenttirivi ja kolme ensimmäistä datariviä näkyvissä):
# V (dm^3) p (Pa) 0.21 1856455 0.31 1176944 0.41 838490
Esimerkki, kuinka tiedoston voi lukea numpy.loadtxt-funktiolla ja tulokset voi kirjoittaa tiedostoon numpy.savetxt-funktiolla:
import numpy as np Vp_data = np.loadtxt("painedata.txt") # Vp_data on nyt NumPy-taulukko, jossa on kaksi saraketta: V ja p R = 8.314462618 # J K^-1 mol ^-1 n = 0.05 # mol V = Vp_data[:, 0] / 1000 # 1. sarake (V, dm^3). Muunnetaan dm^3 -> m^3 p = Vp_data[:, 1] # 2. sarake (p, Pa) T = V * p / (n * R) # K np.savetxt("T.txt", T, fmt="%.3f", header = "T (K)")
loadtxt osaa automaattisesti jättää tiedoston alussa olevan, #-merkillä alkavan kommenttirivin lukematta. Tiedostoja ei tarvitse avata ja sulkea, koska loadtxt ja savetxt tekevät sen puolestasi.
Tulostiedoston T.txt neljä ensimmäistä riviä näyttävät tältä:
# T (K) 937.777 877.634 826.947
savetxt-funktion header-parametrin arvo tulee siis tiedoston alkuun kommenttiriviksi. fmt-parametrin rakenne on periaatteessa sama kuin str.format-funktiolla, mutta kaarisulut korvautuvat %-merkillä, eikä :-merkkiä käytetä. Lisätietoja numpy.savetxt-funktion ohjeesta.
Huom! Jos tarkastelet savetxt-tiedoston luomaa tiedostoa Windowsissa, rivinvaihdot eivät välttämättä näy oikein. Tämä johtuu siitä, etteivät monet Windows-ohjelmat ymmärrä \n-rivinvaihtoa oikealla tavalla. Tiedosto näkyy oikein esim. Spyderissä.
numpy.column_stack
Kun sinulla on useita yksiulotteisia taulukoita, jotka haluat tallentaa sarakkeina tiedostoon, numpy.column_stack on hyvin hyödyllinen funktio. Laajennetaan yllä olevaa esimerkkiä niin, että tallennamme tulostiedostoon myös alkuperäiset tilavuus- ja painedatat.
import numpy as np Vp_data = np.loadtxt("painedata.txt") R = 8.314462618 # J K^-1 mol ^-1 n = 0.05 # mol V = Vp_data[:, 0] / 1000 # 1. sarake (V, dm^3). Muunnetaan dm^3 -> m^3 p = Vp_data[:, 1] # 2. sarake (p, Pa) T = V * p / (n * R) # K # Käytetään np.column_stack -funktiota, jolla yksiulotteiset # NumPy-taulukot voi liittää yhteen kaksiulotteisen taulukon sarakkeiksi VpT_data = np.column_stack([V * 1000, p, T]) # Tilavuudet m^3 -> dm^3 np.savetxt("VpT.txt", VpT_data, fmt="%10.3f %10.0f %10.1f", header = "V (dm^3) p (Pa) T (K)")
Huomaa, miten fmt-parametrille annetaan oma muotoiluparametri jokaiselle sarakkeelle. Tiedoston VpT.txt neljä ensimmäistä riviä näyttävät tältä:
# V (dm^3) p (Pa) T (K)
0.210 1856455 937.8
0.310 1176944 877.6
0.410 838490 826.9
Tehtävä 5.4.1