#!/usr/bin/python # -*- coding: iso8859-2 -*- import sys,os,re,csv r=re.compile( # podacie_cislo datum suma poplatok vyplatene predcislie,ucet bank KS VarSymbol SpecSymbol meno priezvisko ulica cislo psc odosielatel-mesto sprava '''^2....(..............) (........)(............)(......)[IFS](......)[IFS](......)(..........)(....)(....)(..........)(..........).(.................)(.................)(..................................)(...........)(.....)(.................)(........................)[$]''' ) header='Podacie číslo,Dátum,Suma,Poplatok,Vyplatené,Predčíslie,Účet,Banka,KS,VS,SS,Meno,Priezvisko,Ulica,ČD,PSČ,Mesto,Správa' if os.name=='posix': delimiter=',' encoding='iso8859-2' else: delimiter=';' encoding='cp1250' def tosk(value): return ("%4.2f" % (int(value)/100.0)).replace('.',',') def tofloat(value): return int(value)/100.0 def ppp(filename,flfx=tosk): for line in open(filename,'rb').readlines(): reg=r.search(line.strip().decode('cp852').encode(encoding)) if not reg: continue data=[x.strip() for x in reg.groups()] for i in (2,3,4): data[i]=flfx(data[i]) yield data def get_filename(): try: return sys.argv[1] except: pass import gtk dialog = gtk.FileChooserDialog( "Konverzia PPP suborov na CSV format...", None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK) ) dialog.set_default_response(gtk.RESPONSE_OK) filter = gtk.FileFilter() filter.set_name("Subory PPP") for i in range(3): filter.add_pattern("st*zx7cp.?"+"?"*i) dialog.add_filter(filter) response = dialog.run() if response == gtk.RESPONSE_OK: r = dialog.get_filename() elif response == gtk.RESPONSE_CANCEL: sys.exit(0) dialog.destroy() return r def fill_sheet(sheet,filename): cols=header.split(',') sheet.getCellRangeByPosition(0,0,len(cols)-1,0).setDataArray( (tuple(cols),)) rows=[] for data in ppp(filename,tofloat): #add.append((float(data[col].replace(',','.')),)) rows.append(tuple(data)) cellrange=sheet.getCellRangeByPosition(0,1,len(cols)-1,len(rows)) cellrange.setDataArray(tuple(rows)) if __name__ == '__main__': filename=get_filename() writer=csv.writer( open(filename+'.csv','wb'), csv.excel, #quoting=csv.QUOTE_ALL, delimiter=delimiter ) writer.writerow(header.split(',')) writer.writerows(ppp(filename)) try: os.execvp('ooffice',['ooffice', '%s.csv' % filename]) except OSError: pass