[Tutor] Organizing my code, should I use functions? INDENTATION CORRECTION

bob gailer bgailer at gmail.com
Wed Apr 22 20:19:07 CEST 2009


INDENTATION CORRECTION:
    shipped = todaysList[shipindex]
    total = sum([a for a in totals if type(a) == type(2.0)])
    return shipped, total # specify the output(s) here


bob gailer wrote:
> Please use reply-all so a copy goes to the list.
>
> Eduardo Vieira wrote:
>> On Wed, Apr 22, 2009 at 9:47 AM, bob gailer <bgailer at gmail.com> wrote:
>>  
>>> Eduardo Vieira wrote:
>>>    
>>>> Hello! I’m not a programmer
>>>>       
>>> Do you mean that you were not a programmer and are now becoming one?
>>>
>>>     
>>
>> In a way yes, I am aspiring to be one, but because of circumstances in
>> my life I won't be going to take schooling for that.
>>
>>
>>  
>>> To convert to a function ask: - what are the inputs? - what are the 
>>> outputs?
>>>
>>> The input I see is the excel file name. The outputs I see are # shipped
>>> today and total # shipped.
>>>
>>> That leads to a function:
>>>
>>> def getShipmentInfo(xlfilename): # specify the input(s) here
>>>   ###### --- Code to find the right cell with today's shipments
>>>   book = xlrd.open_workbook(xlfilename)
>>>   thisDay = time.gmtime()[:3]
>>>   dayexcel = xlrd.xldate.xldate_from_date_tuple(thisDay, book.datemode)
>>>   thismonth = time.strftime('%B', time.gmtime())   sh =
>>> book.sheet_by_name(thismonth)   firstCol = sh.col_values(0)   tperday =
>>> firstCol.index('TOTAL Per Day')   shipindex = tperday + 1   for 
>>> valores in
>>> sh.col_values(cols):
>>>       if valores == dayexcel:           todaysList = 
>>> sh.col_values(cols)
>>>           totals = sh.row_values(shipindex, end_colx=cols + 1)
>>> break
>>>   shipped = todaysList[shipindex]
>>>   total = sum([a for a in totals if type(a) == type(2.0)])
>>>   return shipped, total # specify the output(s) here
>>>
>>> Eliminate unused statements and whitespace.
>>> Put the main program in a main function (reason 3) above)
>>> The program now looks like:
>>>
>>> ## This script creates a report of shipments ## comparing the 
>>> numbers from
>>> the previous year with the current year.
>>> import xlrd # Package to read Excel files import time import 
>>> datetime def
>>> main():
>>>   # Two excel files to process with shipping information
>>>   thisyearFile = r'c:\Shipping Totals - 2009\Shipping Totals 2009 
>>> West.xls'
>>>   prevyearFile = r'c:\Shipping Totals\Shipping Totals - 
>>> 2008\ShippingTotals
>>> 2008 West.xls'
>>>   shippedToday, totalShipments = getShipmentInfo(thisyearFile)
>>>   shippedLastYear, OldTotalShipments = getShipmentInfo(prevyearFile)
>>>
>>>   # Imports the information from the Eastern division. See code on the
>>> bottom
>>>   .... rest of main program
>>> def getShipmentInfo(xlfilename): # specify the input(s) here
>>>   .... rest of function code from above
>>> if __name__ == "__main__":
>>>   main()
>>>
>>>     
>> Thank you for your help. I guess actually I will have to create 2
>> functions: one for this year, and other for the previous year, right?
>> Because the calculations are different, as you can see in my original
>> code.
>>   
>
> The ONLY difference I can see is the use of current vs prior year, 
> which I missed.
> I also noticed that my code got clobbered, as did yours, by the email 
> program.
> I will attempt to get it right this time and fix the year problem.
>
> add to main program:
>
> thisDay = time.gmtime()[:3]
> aYearAgo = prevyear.timetuple()[:3]
>
> modify function:
>
> def getShipmentInfo(xlfilename, day): # specify the input(s) here
>    ###### --- Code to find the right cell with today's shipments
>    book = xlrd.open_workbook(xlfilename)
>    thisDay = time.gmtime()[:3]
>    dayexcel = xlrd.xldate.xldate_from_date_tuple(day, book.datemode)
>    thismonth = time.strftime('%B', time.gmtime())
>    sh = book.sheet_by_name(thismonth)
>    firstCol = sh.col_values(0)
>    tperday = firstCol.index('TOTAL Per Day')
>    shipindex = tperday + 1
>    for cols in range(sh.ncols):
>        for valores in sh.col_values(cols):
>            if valores == dayexcel:
>                todaysList = sh.col_values(cols)
>                totals = sh.row_values(shipindex, end_colx=cols + 1)
>                break
>  shipped = todaysList[shipindex]
>  total = sum([a for a in totals if type(a) == type(2.0)])
>  return shipped, total # specify the output(s) here
>
> modify calls to function:
>
>    shippedToday, totalShipments = getShipmentInfo(thisyearFile, thisDay)
>    shippedLastYear, OldTotalShipments = getShipmentInfo(prevyearFile, 
> aYearAgo)
>
>
> Now the 1 function should do what you want.
>>
>>  
>>> This is not the only way to use functions or improve things.
>>>
>>> I leave dealing with the east data to someone else, but I think we 
>>> can apply
>>> the same principles.
>>>
>>>    
>>>> Here is the code:
>>>>
>>>> ## This script creates a report of shipments ## comparing the numbers
>>>> from the previous year with the current year.
>>>>
>>>> import xlrd # Package to read Excel files import os import glob import
>>>> time import datetime import dbi import odbc
>>>>
>>>>
>>>>
>>>>
>>>> thismonth = time.strftime('%B', time.gmtime()) # Get's a string with
>>>> the name of the current month
>>>>
>>>> hoje = time.strftime("%a, %b %d, %Y", time.gmtime())
>>>>
>>>>
>>>> # Two excel files to process with shipping information
>>>>
>>>> thisyearFile = r'c:\Shipping Totals - 2009\Shipping Totals 2009 
>>>> West.xls'
>>>> prevyearFile = r'c:\Shipping Totals\Shipping Totals - 2008\Shipping
>>>> Totals 2008 West.xls'
>>>>
>>>>
>>>>
>>>> thisDay = time.gmtime()[:3]
>>>> prevyear = datetime.datetime.today() - datetime.timedelta(days=365)
>>>> aYearAgo = prevyear.timetuple()[:3]
>>>>
>>>> ###### --- Code to find the right cell with today's shipments
>>>>
>>>> book = xlrd.open_workbook(thisyearFile) # Opens excel file
>>>>
>>>> dayexcel = xlrd.xldate.xldate_from_date_tuple(thisDay, book.datemode)
>>>> #Puts the date in the Excel format, like 3991.0
>>>>
>>>>
>>>> sh = book.sheet_by_name(thismonth) # The sheet which has the name of
>>>> the month: April, May, June, etc.
>>>>
>>>> firstCol = sh.col_values(0) # Retrieves the first column
>>>>
>>>> tperday = firstCol.index('TOTAL Per Day') # Finds the cell 'Total 
>>>> Per Day'
>>>>
>>>> shipindex = tperday + 1 # The next cell after 'TOTAL Per Day', which
>>>> contains the info about shipments
>>>>
>>>> # Looks for the column whose header is today's date for cols in
>>>> range(sh.ncols):
>>>>   for valores in sh.col_values(cols):
>>>>       if valores == dayexcel: # If it finds the column with today's 
>>>> date
>>>>           todaysList = sh.col_values(cols)
>>>>           totals = sh.row_values(shipindex, end_colx=cols + 1) # sum
>>>> up to the current date
>>>>           break
>>>>
>>>> # Crosses rows with column to find the right cell with the shipments
>>>> of today shippedToday = todaysList[shipindex]
>>>>
>>>> totalShipments = sum([a for a in totals if type(a) == type(2.0)]) #
>>>> Sums all shipments
>>>>
>>>>
>>>> # Check previous year's shipments processing the file with last year's
>>>> data
>>>>
>>>> booktwo = xlrd.open_workbook(prevyearFile)
>>>>
>>>> dayexcel = xlrd.xldate.xldate_from_date_tuple(aYearAgo, book.datemode)
>>>>
>>>> sh = booktwo.sheet_by_name(thismonth)
>>>>
>>>> firstCol = sh.col_values(0)
>>>>
>>>>
>>>>
>>>> tperday = firstCol.index('TOTAL Per Day')
>>>>
>>>> shipindex = tperday + 1
>>>>
>>>> for cols in range(sh.ncols):
>>>>   for valores in sh.col_values(cols):
>>>>       if valores == dayexcel:
>>>>           lastyearsList = sh.col_values(cols)
>>>>           totals = sh.row_values(shipindex, end_colx=cols + 1) # sum
>>>> up to the current date
>>>>           break
>>>>
>>>>
>>>> shippedLastYear = lastyearsList[shipindex]
>>>>
>>>>
>>>> OldTotalShipments = sum([a for a in totals if type(a) == type(2.0)])
>>>>
>>>>
>>>> # Imports the information from the Eastern division. See code on the
>>>> bottom
>>>>
>>>> import bizreportereast as bz
>>>>
>>>>
>>>> report = """
>>>>
>>>>
>>>> ===== Shipments Alberta Warehouse =====
>>>>
>>>> - Shipments today: %d
>>>>
>>>> - Shipments this month: %d
>>>>
>>>> - Shipments this day, last year: %d
>>>>
>>>> - Shipments this month, last year: %d
>>>>
>>>>
>>>> ===== Shipments Ontario Warehouse =====
>>>>
>>>> - Shipments today: %d
>>>>
>>>> - Shipments this month: %d
>>>>
>>>> - Shipments this day, last year: %d
>>>>
>>>> - Shipments this month, last year: %d
>>>>
>>>>
>>>> """ % (shippedToday, totalShipments, shippedLastYear,
>>>> OldTotalShipments, bz.shippedToday, bz.totalShipments,
>>>> bz.shippedLastYear, bz.OldTotalShipments)
>>>>
>>>> print report
>>>>
>>>> logfile = open('c:/myscripts/logbizreport.log', 'a')
>>>>
>>>>
>>>> #### Code found in bizreportereast.py #### import xlrd import os
>>>> import glob import time import datetime
>>>>
>>>>
>>>> ###### --- Code to find the right cell with today's shipments
>>>>
>>>> thismonth = time.strftime('%B', time.gmtime())
>>>>
>>>> hoje = time.strftime("%a, %b %d, %Y", time.gmtime())
>>>>
>>>> thisyearFile = r'c:\MS Excel\Shipping Totals\Shipping Totals -
>>>> 2009\Shipping Totals 2009 East.xls'
>>>> prevyearFile = r'c:\MS Excel\Shipping Totals\Shipping Totals -
>>>> 2008\Shipping Totals 2008 East.xls'
>>>>
>>>>
>>>>
>>>> thisDay = time.gmtime()[:3]
>>>> prevyear = datetime.datetime.today() - datetime.timedelta(days=365)
>>>> aYearAgo = prevyear.timetuple()[:3]
>>>>
>>>>
>>>>
>>>> book = xlrd.open_workbook(thisyearFile)
>>>>
>>>> dayexcel = xlrd.xldate.xldate_from_date_tuple(thisDay, book.datemode)
>>>>
>>>>
>>>> sh = book.sheet_by_name(thismonth)
>>>>
>>>> firstCol = sh.col_values(0)
>>>> _______________________________________________
>>>> Tutor maillist  -  Tutor at python.org
>>>> http://mail.python.org/mailman/listinfo/tutor
>>>>
>>>>
>>>>       
>>> -- 
>>> Bob Gailer
>>> Chapel Hill NC
>>> 919-636-4239
>>>
>>>     
>>
>>   
>
>


-- 
Bob Gailer
Chapel Hill NC
919-636-4239


More information about the Tutor mailing list