Hi Peter, Thankyou very much for your kind help. I got the output like the way I wanted (which you have also shown in your output). I really appreciate your effort.
Thanks for your time. Amrita On Thu, Jan 9, 2014 at 8:41 PM, Peter Otten <__pete...@web.de> wrote: > Amrita Kumari wrote: > > > On 17th Dec. I posted one question, how to arrange datafile in a > > particular fashion so that I can have only residue no. and chemical > > shift value of the atom as: > > 1 H=nil > > 2 H=8.8500 > > 3 H=8.7530 > > 4 H=7.9100 > > 5 H=7.4450 > > ........ > > Peter has replied to this mail but since I haven't subscribe to the > > tutor mailing list earlier hence I didn't receive the reply, I > > apologize for my mistake, today I checked his reply and he asked me to > > do few things: > > I'm sorry, I'm currently lacking the patience to tune into your problem > again, but maybe the script that I wrote (but did not post) back then is of > help. > > The data sample: > > $ cat residues.txt > 1 GLY HA2=3.7850 HA3=3.9130 > 2 SER H=8.8500 HA=4.3370 N=115.7570 > 3 LYS H=8.7530 HA=4.0340 HB2=1.8080 N=123.2380 > 4 LYS H=7.9100 HA=3.8620 HB2=1.7440 HG2=1.4410 N=117.9810 > 5 LYS H=7.4450 HA=4.0770 HB2=1.7650 HG2=1.4130 N=115.4790 > 6 LEU H=7.6870 HA=4.2100 HB2=1.3860 HB3=1.6050 HG=1.5130 HD11=0.7690 > HD12=0.7690 HD13=0.7690 N=117.3260 > 7 PHE H=7.8190 HA=4.5540 HB2=3.1360 N=117.0800 > 8 PRO HD2=3.7450 > 9 GLN H=8.2350 HA=4.0120 HB2=2.1370 N=116.3660 > 10 ILE H=7.9790 HA=3.6970 HB=1.8800 HG21=0.8470 HG22=0.8470 HG23=0.8470 > HG12=1.6010 HG13=2.1670 N=119.0300 > 11 ASN H=7.9470 HA=4.3690 HB3=2.5140 N=117.8620 > 12 PHE H=8.1910 HA=4.1920 HB2=3.1560 N=121.2640 > 13 LEU H=8.1330 HA=3.8170 HB3=1.7880 HG=1.5810 HD11=0.8620 HD12=0.8620 > HD13=0.8620 N=119.1360 > > The script: > > $ cat residues.py > def process(filename): > residues = {} > with open(filename) as infile: > for line in infile: > parts = line.split() # split line at whitespace > residue = int(parts.pop(0)) # convert first item to integer > if residue in residues: > raise ValueError("duplicate residue {}".format(residue)) > parts.pop(0) # discard second item > > # split remaining items at "=" and put them in a dict, > # e. g. {"HA2": 3.7, "HA3": 3.9} > pairs = (pair.split("=") for pair in parts) > lookup = {atom: float(value) for atom, value in pairs} > > # put previous lookup dict in residues dict > # e. g. {1: {"HA2": 3.7, "HA3": 3.9}} > residues[residue] = lookup > > return residues > > def show(residues): > atoms = set().union(*(r.keys() for r in residues.values())) > residues = sorted(residues.items()) > for atom in sorted(atoms): > for residue, lookup in residues: > print "{} {}={}".format(residue, atom, lookup.get(atom, "nil")) > print > print "-----------" > print > > if __name__ == "__main__": > r = process("residues.txt") > show(r) > > Note that converting the values to float can be omitted if all you want to > do is print them. Finally the output of the script: > > $ python residues.py > 1 H=nil > 2 H=8.85 > 3 H=8.753 > 4 H=7.91 > 5 H=7.445 > 6 H=7.687 > 7 H=7.819 > 8 H=nil > 9 H=8.235 > 10 H=7.979 > 11 H=7.947 > 12 H=8.191 > 13 H=8.133 > > ----------- > > 1 HA=nil > 2 HA=4.337 > 3 HA=4.034 > 4 HA=3.862 > 5 HA=4.077 > 6 HA=4.21 > 7 HA=4.554 > 8 HA=nil > 9 HA=4.012 > 10 HA=3.697 > 11 HA=4.369 > 12 HA=4.192 > 13 HA=3.817 > > ----------- > > [snip] > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > https://mail.python.org/mailman/listinfo/tutor >
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor