Python - File sorts

From PeformIQ Upgrade
Revision as of 12:14, 2 April 2009 by PeterHarding (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Example

#!/usr/bin/env python
#
#  $Id:$
#
#-------------------------------------------------------------------------------

"""
Sort CSV data to generate LoadRunner parameter files
"""

import os
import csv
import sys
import getopt
import random
import datetime

#-------------------------------------------------------------------------------

debug_flg          = False
max_flg            = False
random_flg         = False
verbose_flg        = False

__version__        = '1.0.0'

source_data        = 'Names.dat'
sorted_data        = 'Sorted.dat'

header             = None
no_columns         = None
rows               = []

#==== Misc Sort Functions ======================================================

def by_Col0_as_Int(item1, item2):
   return cmp(int(item1[0]), int(item2[0]))

#-------------------------------------------------------------------------------

def by_Col1_as_UCAlpha(item1, item2):
   return cmp(item1[1].upper(), item2[1].upper())

#----- Read in source CSV data to be transposed --------------------------------

def read_csv():
   global no_columns
   global header

   csv_in  = open(source_data, "rb")

   reader = csv.reader(csv_in)

   cnt = 0

   for row in reader:
      cnt += 1
      if cnt == 1:
         header = row
         continue
      l  = len(row)
      if no_columns:
        if l != no_columns:
           print "Exception at row %d  Found %d columns - should be %d\n%s" % (cnt, no_columns, l, row)
      else:
         no_columns = l

      rows.append(row)

   csv_in.close()  # Explicitly close the file *NOW*

   no_rows = len(rows)

   print "Read %d rows" % no_rows

   return no_rows

#----- Sort the data -------------------------------------------------

def sort():
   out = open(sorted_data,"w")

   #rows.sort(by_Col0_as_Int)
   rows.sort(by_Col1_as_UCAlpha)

   out.write('%s,%s\n' % (header[0], header[1]))

   for row in rows:
      out.write('%s,%s\n' % (row[0], row[1]))

   out.close()

#-------------------------------------------------------------------------------

USAGE = """\

  Usage:

     $ ./sort.py [-d] [-v] [-f <filename>]

"""

def usage():
   sys.stderr.write(USAGE)

#-------------------------------------------------------------------------------

def main(argv):
   global debug_flg
   global verbose_flg
   global file

   #----- Process command line arguments ----------------------------

   try:
      opts, args = getopt.getopt(argv, "df:hv",
                 ["debug", "file=", "help", "verbose"])
   except getopt.GetoptError:
      usage()
      sys.exit(2)
   else:
      for opt, arg in opts:
         if opt in ("-d", "--debug"):
            debug_flg = True
         elif opt in ("-f", "--file"):
            logfile = arg
         elif opt in ("-h", "--help"):
            usage()
            sys.exit(0)
         elif opt in ("-v", "--verbose"):
            verbose_flg = True

   read_csv()
   sort()

#-------------------------------------------------------------------------------

if __name__ == "__main__":
    main(sys.argv[1:])

#-------------------------------------------------------------------------------