On 26/06/14 09:18, Myunggyo Lee wrote:
Hi all
I just started to learn python language.

Welcome.

I'm trying to figure out the reason of error but i couldn't find it.
first imports short.txt(is attached to this mail)
and read in dictionary named gpdic1


Others have pointed out the specific problems with your code.
However you general approach could be different too using some of Pythons features.

# -*- coding: utf-8 -*-
import string, os, sys, time, glob

You should not need to import string any more.
It is a remnant of very old Python code. Its functionality
is (almost) all in the built-in string objects nowadays.
Especially if you are using python v3 - which you don't
tell us...

inf2 =open('short.txt','r')

gpdic1={}
while 1:
         line= inf2.readline()
         if not line: break

A better way of doing this in Python is to use a
for loop.

You could rewrite the lines above as one line:

for line in open('short.txt'):   # 'r' is the default mode

         lines = line[:-1].split(',')

rather than stripping of the lst character its usually better to use the rstrip() method - there migfht be more than one character to be removed...

lines = line.rstrip().split(',')

Also if this is a comma separated file, as seems to be implied by the split(). You will find a csv module in the standard library that can make this much easier. It can read the data directly from the file
into a list of dictionaries via a DictReader object.


         hgene = lines[1]
         chr1 = lines[4]
         hgstart = lines[5]
         hgstop = lines[6]
         tgene = lines[7]
         chr2 = lines[10]
         tgstart = lines[11]
         tgstop = lines[12]

         gpdic1["hgene"] = hgene
         gpdic1["chr1"] = chr1
         gpdic1["hgstart"] = hgstart
         gpdic1["hgstop"] = hgstop
         gpdic1["tgene"] = tgene
         gpdic1["chr2"] = chr2
         gpdic1["tgstart"] = tgstart
         gpdic1["tgstop"] = tgstop

You could have done all of that directly and avoided the double assignments.

ie
gpdic1["hgene"] = lines[1]

etc...


The csv.DictReader would do it all for you and correctly
return a list of dicts instead of just the last one.

import csv
datafile = open(...)
data = csv.DictReader(datafile)

data is now a collection of dictionaries each of
which is like your gpdic1 above.
If the file does not include the required keys in the
first line you can provide them as a list of strings
to DictReader - see the manual...

Python has a wealth of modules in its library and part of
becoming a good Python programmer is in learning whats
there and how to use it. That takes time and experience
but its often a quick Google in case.

Finally, it looks a lot like bioscience. There are some
specific Python modules (and versions) designed for
that area. You may find a Google search for Python and
bioscience throws up something useful.

hth
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to