| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Pythonissa dataa helpommin tiedostoonempty 13.06.04 12:50 Pari rutiinia jotka helpottavat tekstin, muuttujien ja binääridatan kirjoittamista tiedostoon.
"""Näitä rutiineja käytän aika paljon tiedostoon kirjoittamiseen ja sieltä lukemiseen. Ei näissä mitään ihmeellistä ole, mutta yllättävän monet käyttävät jatkuvasti samoja ~5-rivisiä koodinpätkiä tiedostoon kirjoittamiseen vaikka samat asiat voi hoitaa parilla funktiolla. Normaalisti jos kirjoittaisit f = file('blah.txt', 'w') try: f.write('jee') finally: f.close() se onnistuu myös näin: textToFile('blah.txt', 'jee') Ehkä hyödyllisimmät ovat silti dataToFile ja dataFromFile, joilla tiedostoon voi laittaa lähes mitä tahansa. Esim. jos teet pitkän laskun muutamalla funktiolla hakemistot = tutkiKaikkiAlihakemistot('c:\\') vastaus = laskeJotain(hakemistot) Niin voi olla hyödyllistä laittaa välitulokset tiedostoon ettei tartte aina jokaista välivaihetta laskea uudestaan. dataToFile('hakemistot', tutkiKaikkiAlihakemistot('c:\\')) vastaus = laskeJotain(dataFromFile('hakemistot')) Siitä sitten vain kommentoi ekan rivin pois kunhan kaikki alihakemistot on rouskutettu läpi kertaalleen. Tai monta muuttujaa menee tietty tuplena: # pelin päättyessä dataToFile('config', (self.config, self.keys)) ... # pelin käynnistyessä self.config, self.keys = dataFromFile('config') """ def _toFile(fn, data, access=''): f = file(fn, 'w'+access) try: f.write(data) finally: f.close() def _fromFile(fn, access=''): f = file(fn, 'r'+access) try: return f.read() finally: f.close() def bytesFromFile(filename): return _fromFile(filename, 'b') def textFromFile(filename): return _fromFile(filename) def linesFromFile(filename): return textFromFile(filename).split('\n') def bytesToFile(filename, bytes): _toFile(filename, bytes, 'b') def textToFile(filename, text): _toFile(filename, text) def linesToFile(filename, lines): textToFile(filename, '\n'.join(lines)) def dataToFile(filename, data, compress=False): """Save 'data' to file. 'data' can be any pickleable variable. Uses cPickle in binary mode. Optional compression uses bz2.""" import cPickle f = file(filename, 'wb') try: if not compress: return cPickle.dump(data, f, True) import bz2 from cStringIO import StringIO out = StringIO() cPickle.dump(data, out, True) f.write(bz2.compress(out.getvalue())) out.close() finally: f.close() def dataFromFile(filename, compress=False): """Load data from file and return it.""" import cPickle f = file(filename, 'rb') try: if not compress: return cPickle.load(f) import bz2 from cStringIO import StringIO inp = StringIO(bz2.decompress(f.read())) data = cPickle.load(inp) inp.close() return data finally: f.close() ane 21:46 29.7.04 Ihan kätevä. Pitää ottaa esiin kun ensi kerralla jotain koodaa. |
![]() Haku
|