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>