Kirjoitin työläästä muunnoksesta, jonka älyjääkaapin Google Docsiin lähettämä tiedostomuoto tarvitsi ennen kuin Excel tunnisti sen aikamerkinnät oikein. Kommenteissa nimimerkki Zarr antoi hyvän vinkin: Pythonissa on valmiina aikamerkintöjen muuntamiseen sopivat työkalut.
Totta! Siispä töihin.
Ongelma on siinä, että älyjääkaappi lähettää tiedot oven avauksista hassussa formaatissa ja tallentaa ne IFTTT-rajapinnan kautta Google Docsin laskentamalliin näin:
|
Google Docsin laskentamallin alkua. |
Googlen omilla toiminnoilla datan saa haettua omalle levylle Excel-tiedostoon, mutta päivämäärien muokkaus Excelin ymmärtämään muotoon on työlästä.
Niinpä tallensin datan Excelistä tekstitiedostoon:
|
Data tekstimuodossa 12h kellonaikoina. |
Sen jälkeen tein pienen Python-ohjelman. Siitä on lukuisia vuosia, kun olen viimeksi ohjelmoinut mitään, saati opetellut kokonaan uutta kieltä. Python on kuitenkin suosittu ja sillä on helppo tehdä asioita, jotka muilla olisivat erittäin työläitä. Tässä auttavat kirjastot, joita on saatavissa liki jokaiseen tarkoitukseen. Käytin itse
openpyxl-nimistä kirjastoa, jonka avulla oma Python-sovellus pystyy lukemaan ja kirjoittamaan Excel-tiedostoja. Se avaa hienoja mahdollisuuksia tiedostomassojen analysointiin tai esimerkiksi lokitiedostojen esiprosessointiin, kuten tässä.
|
Python-ohjelma mahtuu muutamaan riviin. |
Valmiiden kirjastojen ansiosta omasta ohjelmasta tulee yksinkertainen: se vain lukee tekstimuotoisen lokitiedoston, poimii riveiltä jääkaapin tuottaman aikaleiman ja palastelee sen uudelleen, sekä kirjoittaa lopputuloksen Excel-tiedostoon. Ohjelman rivejä voisi vielä vähentää tekemällä kaiken yhdessä luupissa.
Dokumentaation mukaan %d lukee päivän numeron silloin, kun alle kymmenen numeroita edeltää nolla (01, 02, 03...) ja että normipäiviin (1, 2, 3...) pitäisi käyttää muotoa %-d. Ilmeisesti dokumentaatio on vanhentunut, sillä %-d ei toiminut ja %d tuotti oikeat numerot kaikilla päivämäärillä.
Muutaman sekunnin ajo ja C:\temp-hakemistoon syntyy tiedosto ajat.xlsx. Onneksi Excel ymmärtää suoraan Pythonin käyttämää formaattia, joten aikaleimaa ei tarvitse muokata merkkijonona ennen kirjoittamista, mutta tarvittaessa sekin olisi helppo koodata.
|
Data Excelissä sen ymmärtämässä päiväysformaatissa 24h kellonaikoina. |
Kouluissa olisi hyvä opettaa kaikille ohjelmoinnin perusteet, sillä se auttaa ymmärtämään koneiden ja tietojärjestelmien toimintaa -- ja varsinkin toimimattomuutta. Pienellä vaivalla apuohjelmista ja omatekoisista pikkuohjelmista saa itselleen tehokkaita työkaluja, kuten tässä.
Ei sitä tekstitiedostoa tarvita:
VastaaPoistaimport openpyxl
from datetime import datetime
xl = "jääkaappi.xlsx"
wb = openpyxl.load_workbook(xl)
ws = wb.active
for row in ws.iter_rows():
# row = solujen lista, indeksointi nollasta
if not row[0].value: break
cell = row[2]
cell.value = datetime.strptime(row[0].value, '%B %d, %Y at %I:%M%p')
# excelin datetime on vain reaaliluku, jonka saa muotoilla miten lystää
cell.number_format = "dd.mm.yyyy hh.mm.ss"
# voisi myös tallettaa uudella nimellä
wb.save(xl)
Vielä kun pystyisi lukemaan datan suoraan Google Docsista ilman, että pitää tallentaa välillä omalle levylle Excel-tiedostoksi. Varmaan siihenkin on joku modulin tehnyt?
VastaaPoistaKirjoittaja on poistanut tämän kommentin.
VastaaPoistaTokihan se onnistuu, helpoiten käyttäen Googlen Colab-ympäristöä.
VastaaPoista