Hello All,<br><br>I have this class that I use in one of my projects. I know it's missing functionality and some things could have been done differently. Can you ehlp me make this class better? What can I do to make it more resistant to error? You can find the stdout_colours class on Google if you want it, JFGI I want to make it more pythonic. I come from a PHP background, can you tell?<br>
<br>Any and all help is appreciated<br>-Alex<br><br>#!/usr/bin/env python<br>from ctypes import *<br>import os, sys, types, csv, urllib, urllib2, urlparse, string,stdout_colours<br><br>class parsercsvy(object):<br> """Return a line from a csv file or total amount of lines"""<br>
def __init__(self,file_name=""):<br> self.func_me_color="white_on_black"<br> self.soc=stdout_colours.stdout_colors()<br> self.soc.me_him(['ENTER:',__name__],self.func_me_color)<br>
self.filename = file_name<br> self.buffer = []<br> self.bufferp= []<br> if string.find(self.filename,"http") != -1:<br> resp=urllib2.urlopen(self.filename)<br> file=resp.read()<br>
lfi=len(string.split(self.filename,"/"))<br> filename = "/tmp/"+string.split(self.filename,"/")[lfi-1]<br> f=open(filename,"w")<br> f.write(file)<br>
f.close<br> self.parse(self.filename)<br> else:<br> self.parse(self.filename)<br> self.soc.me_him(['EXIT:',__name__],self.func_me_color) <br> def parse(self,filename,ret=0):<br>
self.soc.me_him(['ENTER:',__name__],self.func_me_color)<br> i = 0<br> try:<br> reader = csv.reader(file(filename, "rb"))<br> try:<br> for row in reader:<br>
self.buffer.append(row)<br> s,a=[],{}<br> <br> for j in range(len(self.buffer[0])):<br> a[self.buffer[0][j]]=row[j]<br> self.bufferp.append(a)<br>
i+=1<br> self.total = i-1<br> except csv.Error, e:<br> sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))<br> except IOError, e:<br>
sys.exit('file %s, IOError: %s' % (filename, e))<br> self.soc.me_him(['EXIT:',__name__],self.func_me_color)<br> def index(self, index):<br> """return line for index"""<br>
self.soc.me_him(['ENTER:',__name__],self.func_me_color)<br> self.soc.me_him(['RETURN:',self.buffer[int(index)],__name__],self.func_me_color)<br> return self.buffer[int(index)]<br> def total(self):<br>
"""return total number of lines in csv file"""<br> self.soc.me_him(['ENTER:',__name__],self.func_me_color)<br> self.soc.me_him(['RETURN:',self.total,__name__],self.func_me_color)<br>
return self.total<br> def header(self):<br> """return csv header == line 0"""<br> self.soc.me_him(['ENTER:',__name__],self.func_me_color)<br> self.soc.me_him(['RETURN:',self.buffer[0],__name__],self.func_me_color)<br>
return self.buffer[0]<br> def find_and_replace(self,li,fi,re):<br> """<br> find and replace a string inside a string, return list<br> find_and_replace(list,find,replace)<br> """<br>
this=[]<br> for l in li:<br># found_index=string.find(l,fi)<br> this.append(l.replace(fi,re))<br> return this<br> def return_buffer(self):<br> self.soc.me_him(['ENTER:',__name__],self.func_me_color)<br>
self.soc.me_him(['RETURN:',self.buffer,__name__],self.func_me_color)<br> return self.buffer<br>if __name__ == "__main__":<br> if len(sys.argv) < 1:<br> print "Usage: %s file"% sys.argv[0]<br>
f=sys.argv[1]<br> c=csv_parser(f)<br> print c.bufferp<br>-- <br>А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я<br>а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я<br>