removing the ' from list elements

doyen at mediaone.net doyen at mediaone.net
Wed Mar 8 04:12:13 CET 2000


I think this is a newbie oops situation,  but I have read the tutorial,
library reference and laguage reference without any Eureka!'s. Maybe
it's too many years of basic.

I've written a program that reads ftp LIST output, filters it and puts
in in a list for sorting. I'm taking each line from the file listing I
retrieve, parsing it into a list of year, month, day, time, size, name
and source by using string.split. I then use sting.join on each 'mini
list'  into a formated line and place it in a 'master' list to use
list.sort() and list.reverse for sorting by date last modified.

When I retirieve (or examine) the elements within the list, I use
string.split again to parse them, then use strimg,replace('[', '') for
compariisons, or for output.
I';ve got a routine that I use for removing them,. but I'd rather not
add them in the first place. A single space delimiter would work.

Is there a format that I can create my 'columns' without using the list
format  ["", "", ""] with these characters that I have to keep removing?

btw: I'm not complaining, I'm loving Python, it runs fast, quick to
code, easy to read, I just feel bad about adding then removing the extra
charaters.

Other python newbie questions are....
Should I always return something from a function (note the return 1's)
Is use string.find on the whole string first, to see if I need to do a
string.split, thinking it would be more efficient if most of the strings
would not return a match.
Am I doing my filter modification routine correctly (see below)
list = filter('i', 'Jan", list) # only leaves items with Jan
or
list = filter('r', 'Jan", list) # to remove any item with Jan in it.

Here's some of my code snippits, suggestions welcome

def cleanline(inline):
    outline = string.replace(inline, "'", "")
    outline = string.replace(inline, '"', '')
    outline = string.replace(outline, ",", "")
    outline = string.replace(outline, "[", "")
    outline = string.replace(outline, "]", "")
    return outline

def getdatelist(ftpline):
    yr = m = dy = tm = 'z'  # set to error if not converted
    tt = string.split(ftpline)  # returns list of year, month, day and
time all numeric for sorting
    yr = str(tt[7])
    tp = string.find(yr, ':')  # current year, ftp shows time
    if tp > -1:
             tm = yr
            yr = 2000
    else:
            tm = '00:00'   # use a dummy time of 00:00
    dy = string.zfill(tt[6], 2)  # zero fill date for sorting
    mo = tt[5]    # convert alpha month to number for sorting
    if mo == 'Jan':
        m = '01'
    elif mo == 'Feb':
        m = '02'
    elif mo == 'Mar':
        m = '03'
    elif mo == 'Apr':
        m = '04'
    elif mo == 'May':
        m = '05'
    elif mo == 'Jun':
        m = '06'
    elif mo == 'Jul':
        m = '07'
    elif mo == 'Aug':
        m = '08'
    elif mo == 'Sep':
        m = '09'
    elif mo == 'Oct':
        m = '10'
    elif mo == 'Nov':
        m = '11'
    elif mo == 'Dec':
        m = '12'
    else:
        m = '99'
    outlst = [yr, m, dy, tm]
    return outlst

def addtoclist(thisline, pgmname, ppath):
    global clist
    pathstr = ' (' + ppath + ')'
    tl = string.split(thisline)
    q = string.find(thisline, pgmname)
    if q > -1:   # Check for match in entire line
     tln = str(tl[-1])
     q = string.find(tln, pgmname)
     if q > -1:   # make sure match was from Name portion of line
        dl = getdatelist(thisline)
        sz = string.rjust(str(tl[4]), 7) # the size
        dl.append(sz)  # append the size to aid in comparison of files
        dl.append(tln)  # append name onto list
        dl.append(pathstr)
        clist.append(str(dl)) # add to tlist for sorting
    return 1  # default always return true

def filter(ftype, txt, chklist):    # after the initial display, this
allows lines to be removed by supplying a string that is either
included, or to be removed.
    newlist = []                        # I want to modify the supplied
chklist,
    for l in chklist:
        x = string.find(l, txt)
        if ftype == 'i':
            if x >= 0:
                newlist.append(l)
        else:
            if x < 0:
                newlist.append(l)
    list = newlist[:]
    return list

def showfound(curlist, title, count):    # count is a maximum number of
items, if -1 display the entire list
        tc = len(curlist)  # count of items in list
        if tc == 0:
            print title
            print 'No records found '
            return
        if count == -1:   # a -1 means print the whole list
            count = tc
        if count > tc:   # if there are fewer items in list, reset count
to
            count = tc   # avoid a subscript error
        i = 1
        print title
        while i:   # lists are relative 0 subscripts so we subtract 1
            o = cleanline(curlist[i-1])    # remove list delimeters
            i2 = string.rjust(str(i), 3)    # line number
            print i2, o
            i = i + 1
            if i > count:
                break
            if i % 20 == 0:
                c = raw_input("Press return to continue ") # pause every
20 items to view display
                if c == 'q'or c == 'Q':                     # q quits
menu
                    break
                print title
        return 1


doyen at mediaone.net





More information about the Python-list mailing list