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 <bgai...@gmail.com> wrote:Eduardo Vieira wrote:Hello! I’m not a programmerDo 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 insh.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 fromthe previous year with the current year.import xlrd # Package to read Excel files import time import datetime defmain(): # Two excel files to process with shipping informationthisyearFile = r'c:\Shipping Totals - 2009\Shipping Totals 2009 West.xls' prevyearFile = r'c:\Shipping Totals\Shipping Totals - 2008\ShippingTotals2008 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 applythe 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 informationthisyearFile = 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 columntperday = 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 datetodaysList = 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@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 _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor