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

Eduardo Vieira eduardo.susan at gmail.com
Wed Apr 22 16:49:22 CEST 2009


Hello! I’m not a programmer and am a beginner with Python, I would
like suggestion about ways of tackling the task I had to do. I have
bee been using the xlrd package to get data from some spreadsheets
successfully.
I have developed a simple report from a script that compares number of
shipments recorded in 2 spreadsheets, with data from previous years
and current year, respectively.
Later on I was asked to include in the same report numbers from
another branch of our company. So, basically all the code logic was
the same, only two different files needed to be processed, and I
wondered how would I save time avoiding repeating code, creating extra
variables, etc. So, I simply decided to alter the code as little as
possible and use the import statement. It's working this way. Sounds
wise? I thought if I converted it to a function or a class would make
it more flexible, but my understanding of classes are too basic yet,
and am not sure if it's worth using it.
I have noticed that in lot's of python code example, people make
functions out of everything. I'm still too much attached to
procedural, not functional programming, if I understand the terms
correctly. I would appreciate any suggestions.

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)


More information about the Tutor mailing list