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 pvmEn tiedä, onko Pythonissa tähän jotain suorempaa tapaa, mutta yllä oleva ainakin toimii.
Antin esimerkkiin vaihtaisin rangen 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 pvmPython 2.6:sta alkaen toimii vieläpä enumeraten 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.2008Juu 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.