Sunday, June 27, 2010

Simple python file lookup function for newbie


Config file 'ip-mapping.txt' is a file of the following format:

$ cat /home/testusr/work/ip-mapping.txt
#id:ip1,ip2,ip3
200:172.17.4.12,172.17.4.14,172.17.4.10
205:172.17.4.14,172.17.4.14,172.17.4.11
210:172.17.4.12,172.17.4.18,172.17.4.18
208:172.17.4.11,172.17.4.10,172.17.4.19

Required: Create a simple python function which will accept an 'id' and will return 'ip1' from the list of ips.

The python script:

import os,sys

config = '/home/testusr/work/ip-mapping.txt'
if not os.path.exists(config):
print config+' file not present'
sys.exit()

def getip(id):
all = open(config).readlines()
for line in all:
if line.startswith('#'):
continue
f=line.split(":")
if f[0]==id:
return f[1].split(',')[0]

ip=getip('205')
print ip

Executing it:

$ python get-ip.py
172.17.4.14

I am sure there will be much better solutions to this problem, please comment, really appreciated.

The description about Exit function of 'sys' module (source) :

sys.exit([arg])
Exit from Python. This is implemented by raising the SystemExit exception, so cleanup actions
specified by finally clauses of try statements are honored, and it is possible to intercept the exit
attempt at an outer level. The optional argument arg can be an integer giving the exit status
(defaulting to zero), or another type of object. If it is an integer, zero is considered “successful
termination” and any nonzero value is considered “abnormal termination” by shells and the
like. Most systems require it to be in the range 0-127, and produce undefined results otherwise.

Some systems have a convention for assigning specific meanings to specific exit codes, but these
are generally underdeveloped; Unix programs generally use 2 for command line syntax errors
and 1 for all other kind of errors. If another type of object is passed, None is equivalent to
passing zero, and any other object is printed to sys.stderr and results in an exit code of 1. In
particular, sys.exit("some error message") is a quick way to exit a program when an error occurs.

Related posts on lookup on file using python:

4 Comments:

bchild said...

Hi Jadu,

Looking for some quick help here

Here is my input file (testscores.dat):
Geoff Ogilvy,-6
Rory Sabbatini,-10

I'm trying to write a script that functions as a "lookup". For example, if I pass in "Geoff Ogilvy" i'd expect to get '-6'.

I'm missing something obvious, but am confused with your example since you are parsing out the column headers and special characters (#).

Thanks for your help!!

Jadu Saikia said...

@bchild,


The same script works for your input file.

Only change required here:
f=line.split(":")
should be
f=line.split(",")

Also you can use awk, something like this:

$ awk -v player="Geoff Ogilvy" -F "," '$1==player {print $2}' testscores.dat

-6

Please let me know if you need any help on this. Thanks for reading pythonstarter.

bchild said...

Thanks Jadu, here is what I have (apologies for knowing next to nothing here):

>>> config = '/python27/testscores.dat'

>>> def getip(id):
all = open(config).readlines()
for line in all:
if line.startswith("#"):
continue
f=line.split(":")
if f[0]==id:
return f[1].split(',')[0]


>>> ip=getip('Geoff Ogilvy')
>>> print ip
None

bchild said...

Nevermind Jadu, i missed it again. All good now! Thanks so much