On 2007-12-04, Horacius ReX <[EMAIL PROTECTED]> wrote: > Hi, I have a text file like this; > > 1 -33.453579 > 2 -148.487125 > 3 -195.067172 > 4 -115.958374 > 5 -100.597841 > 6 -121.566441 > 7 -121.025381 > 8 -132.103507 > 9 -108.939327 > 10 -97.046703 > 11 -52.866534 > 12 -48.432623 > 13 -112.790419 > 14 -98.516975 > 15 -98.724436 > > So I want to write a program in python that reads each line and > detects which numbers of the second column are the maximum and > the minimum.
Check out 3.6.1 String Methods in the Python Library Reference. It contains what you need. Also, read about max and min from 2.1 Built-in Functions. > I tried with; > > import os, sys,re,string The string module is best avoided, except for a few character classes, e.g., Paladins and Clerics. ;-) Use str methods instead. It's more readable to import one module per line. > # first parameter is the name of the data file > name1 = sys.argv[1] > infile1 = open(name1,"r") > > # 1. get minimum and maximum > > minimum=0 > maximum=0 > > > print " minimum = ",minimum > print " maximum = ",maximum > > > while 1: > line = infile1.readline() This isn't the best way to read files in Python. Check out 7.2 Reading and Writing Files in the Python Tutorial. > ll = re.split("\s+",string.strip(line)) > print ll[0],ll[1] > a=ll[0] > b=ll[1] Don't mix tabs and spaces. Python's Style Guide generally recommends four spaces per indent. > print a,b > if(b<minimum): readline returns str objects. You'll need to convert them to numbers manually before comparing. > minimum=b > print " minimum= ",minimum > if(b>maximum): > maximum=b > print " maximum= ",maximum > > print minimum, maximum > > > But it does not work and I get errors like; > > Traceback (most recent call last): > File "translate_to_intervals.py", line 20, in <module> > print ll[0],ll[1] > IndexError: list index out of range This is caused by line becoming an empty string when readline encounters end of the file. > Could anybody help me ? The following will not work in Python 2.4 or earlier. from __future__ import with_statement import sys from operator import itemgetter from contextmanager import closing with closing(file(sys.argv[1])) as fp: table = [(int(i), float(n)) for i, n in (line.split() for line in fp)] print table print "maximum =", max(table, key=itemgetter(1)) print "minimum =", min(table, key=itemgetter(1)) -- Neil Cerutti -- http://mail.python.org/mailman/listinfo/python-list