Kuinka muutan "22. marraskuuta 2008" muotoon "22.11.2008" pythonissa?
Miltä nykyinen koodi näyttää? Mistä päivämäärä tulee ja mikä vaikuttaa sen muotoiluun?
Vai tarkoitatko, että käyttäjä kirjoittaa "22. marraskuuta 2008" ja ohjelma ilmoittaa "22.11.2008"?
En ole Pythonia koskaan käyttänyt, mutta netistä katsottuna seuraava voisi toimia, jos päivämäärä on merkkijono:
test = '22. marraskuuta 2008' test = test.replace ( ' marraskuuta ', '11.' )
Juu tuo replace tuli mieleen itsellänikin, mutta tuossa joutuu tekemään aikamoiset viritykset että saa muutettua kaikki kuukausien nimet numeromuotoon. Siksi mietinkin, että onko tuohon jotain simppeliä ratkaisua jotenkin tähän tyyliin esimerkiksi
date = "22. marraskuuta 2008"
date = date.format(d.m.y)
tuo päivämäärä kopioidaan suoraan tuollaisenaan nettisivulta.
Oma muunnos ei ole itse asiassa kovin mutkikas:
pvm = "22. marraskuuta 2008" nimet = ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu'] for kk in range(0, 12): pvm = pvm.replace(' ' + nimet[kk] + 'kuuta ', str(kk + 1) + '.') print pvm
En tiedä, onko Pythonissa tähän jotain suorempaa tapaa, mutta yllä oleva ainakin toimii.
Antin esimerkkiin vaihtaisin range
n tilalle enumerate(nimet)
, jolloin saadaan paikka listassa eikä nimeäkään tarvitse enää erikseen kaivella:
pvm = '22. marraskuuta 2008' nimet = ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu'] for i, nimi in enumerate(nimet): pvm = pvm.replace(' ' + nimi + 'kuuta ', str(i + 1) + '.') print pvm
Python 2.6:sta alkaen toimii vieläpä enumerate
n start
-parametri, jolloin i + 1
:n sijasta riittää i
:
for i, nimi in enumerate(nimet, start=1): pvm = pvm.replace(' ' + nimi + 'kuuta ', str(i) + '.')
Mäkin tekisin Jaskan ja Antin tavalla, mutta tein mielenkiinnosta tämmösen funktion.
import time, datetime def Python_ei_osaa_Suomea(merkkijono): print datetime.date(*time.strptime(merkkijono,'%d. %B %Y')[0:3]).strftime('%d.%m.%Y')
Tuossa strftimen direktiivit.
*time muuttaa ton päivämäärä-tuplen ((2008, 11, 22)) tämmöseksi (2008, 11, 22).
Python_ei_osaa_Suomea('22. November 2008') >>> 22.11.2008
Juu eli hoidan homman siis replacella. Kiitoksia.
Kyllä Python osaa suomea, jos locale-moduulin kautta vääntää ja ympäristö tukee. Tosin se ei sittenkään ymmärrä partitiiveja. Ne ovatkin tunnetusti vaikeita suomea vieraana kielenä oppiville.
import locale import datetime locale.setlocale(5, "Finnish_Finland") print datetime.date.today().strftime("%A %d. %B %Y")
Sanoopi: sunnuntai 14. joulukuu 2008
P.S. En suosittele käyttämään tätä pvmien jäsennykseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.