Excel-tiedoston lukeminen Pythonilla
Mehuwiki
... Tämä sivu on vielä keskeneräinen ...
Sisällysluettelo |
Xlrd-kirjaston asentaminen ja testaus
Xlrd-kirjasto on puhdas Python-kirjasto, eli ei sisällä esim. C-kielisiä osia, eikä ole riippuvainen mistään muusta kirjastosta. Tämän vuoksi kirjaston asentaminen on yksinkertainen ja suoraviivainen toimenpide. Tästä huolimatta lue nämä ohjeet kertaalleen läpi, ennen kuin aloitat asentamisen.
Hae tiedosto xlrd-0.3a1.zip Lingfon sivulta http://www.lexicon.net/sjmachin/xlrd.htm. Pura pakattu tiedosto johonkin mielestäsi sopivaan hakemistoon. Valitulla hakemistolla ei ole merkitystä mutta seuraavassa oletetaan, että olet purkanut kirjaston hakemistoon ~/Python/xlrd-0.3a1.
Asenna kirjasto suorittamalla seuraava komento:
~/Python/xlrd-0.3a1.zip$ sudo python setup.py install 2>&1 | tee install.log
Komento suorittaa kirjaston asennusskriptin ja ohjaa asennuksesta syntyvän tulosteen myös tiedostoon install.log (varmuuden vuoksi).
Asennuksen aikana ainakin allekirjoittaneen koneella syntyy varoitus:
/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/distutils/dist.py:227: UserWarning: Unknown distribution option: 'package_data' warnings.warn(msg)
Tällä varoituksella ei näyttäisi olevan mitään vaikutusta mutta toistaiseksi on vielä selvittämättä, pitäisikö asiasta huolestua.
Varmista, että kirjaston asentaminen onnistui. Siirry pois hakemistosta ~/Python/xlrd-0.3a1 ja suorita seuraava komento:
~/Python$ python -c "import xlrd"
Komento yrittää ladata Xlrd-kirjaston. Jos kirjaston lataus onnistuu, niin mitään virheilmoitusta ei synny eikä mitään muutakaan tapahdu. Asennus on onnistunut tällöin hyvin. Jos taas Python antaa virheilmoituksen, niin asennus on epäonnistunut.
Onnistuneen asennuksen jälkeen voit halutessasi poistaa kirjaston väliaikaisesta sijoituspaikastaan:
~/Python$ rm -rf xlrd-0.3a1
Xlrd-kirjaston toiminta
Luokka Book
encoding
Työkirjan koodisivusta johdettu merkistön.
nsheets
Työkirjan välilehtien lukumäärä.
print "Työkirjassa on %d välilehteä" % tyokirja.nsheets
sheet_by_index(indeksi)
Metodi palauttaa indeksiä indeksi vastaavan välilehden. Mikäli indeksiä vastaavaa välilehteä ei löydy, metodi synnyttää poikkeuksen RangeError.
for indeksi in range(tyokirja.nsheets):
lehti = tyokirja.sheet_by_index(indeksi)
print "Välilehdellä %s on %d riviä ja %d saraketta" % \
(str(lehti.name), lehti.nrows, lehti.ncols)
sheet_by_name(välilehden_nimi)
Metodi palauttaa annettua nimeä välilehden_nimi vastaavan välilehden. Palautettu välilehti on luokan Sheet ilmentymä. Jos nimeä vastaavaa välilehteä ei työkirjasta löydy, niin metodi synnyttää poikkeuksen <<2DO: Selvitä poikkeus>>.
for nimi in tyokirja.sheet_names():
lehti = tyokirja.sheet_by_name(nimi)
print "Välilehdellä %s on %d riviä ja %d saraketta" % \
(str(lehti.name), lehti.nrows, lehti.ncols)
sheet_names()
Metodi palauttaa listan työkirjan välilehtien nimistä.
for nimi in tyokirja.sheet_names():
print nimi
user_name
Tieto työkirjan viimeksi tallettaneen käyttäjän nimestä, mikäli vain saatavissa.
Esimerkki Excel-tiedoston lukemisesta
Oletamme, että käytössämme on seuraavanlainen Excel-taulukko nimeltään kertoimia.xls:
Seuraava Python-ohjelma lukee taulukon sisällön ja tulostaa sen perusteella listan lopputulosten yhdistelmistä.
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-
import xlrd
def ifthen(jos, niin, muutoin = None):
"Kapseloi \"if: ... else: ...\" -rakenteen lausekkeeksi."
if jos:
return niin
else:
return muutoin
def yksmon(x, yks, mon):
"Valitsee nominin numeruksen annetun luvun mukaan."
return "%d %s" % (x, ifthen(x == 1, yks, mon))
xls = xlrd.open_workbook("kertoimia.xls")
print "Työkirjassa on %s." % yksmon(xls.nsheets, "lehti", "lehteä")
# Valitaan ensimmäinen (ja ainoa) lehti
lehti = xls.sheet_by_index(0)
def rowiter(sheet, first_row = 0):
for r in range(first_row, sheet.nrows):
yield [c.value for c in sheet.row(r)]
print "Yhd.\tPeli 1\tPeli 2\tPeli 3\tKerroin"
for (n, k1, v1, k2, v2, k3, v3, k, dummy) in rowiter(lehti, 4):
print "%d.\t%d - %d\t%d - %d\t%d - %d\t%.2f" % (n, k1, v1, k2, v2, k3, v3, k)
Ohjelman tuottaa seuraavan lopputuloksen:
Yhd. Peli 1 Peli 2 Peli 3 Kerroin 1. 2 - 0 1 - 1 1 - 0 200.16 2. 2 - 0 1 - 1 1 - 1 208.67 3. 3 - 0 1 - 1 1 - 0 232.49 4. 2 - 1 1 - 1 1 - 1 238.35 5. 2 - 0 0 - 1 1 - 0 245.15 6. 2 - 0 1 - 2 1 - 1 257.33 7. 2 - 1 1 - 1 1 - 0 258.95 8. 3 - 0 1 - 1 1 - 1 262.18 9. 1 - 1 1 - 1 1 - 1 268.60 10. 2 - 0 1 - 1 2 - 0 273.16



