I have one file which has follow lines:
B99990001 1 2 3 4
B99990001 1 3 3 4
B99990002 1 2 3 4
B99990002 1 3 3 4
B99990003 1 2 3 4
B99990003 1 3 3 4
So Here my aim is to make a main list which should have three sub lists based on the first columns (B99990001,B99990002,B99990003) of lines:
Mainlist=[
['B99990001 1 2 3 4','B99990001 1 3 3 4'],#sublist1 has B99990001
['B99990002 1 2 3 4','B99990002 1 3 3 4'],#sublist2 has B99990002
['B99990002 1 2 3 4','B99990002 1 3 3 4'] #sublist3 has B99990002
]
I hope, My question is understandable. So If someones know could you help me out of this.
Thanking you in advance
SEE HERE MY REAL EXAMPLE:
import os
import re
pdbPathAndName = ['/Users/Mahesh/Documents/MAHESH_INTERNSHIP_2014 /ENZOWP2/2WC5_090715_170128/E3P/E3P.B99990001.pdb','/Users/Mahesh/Documents/MAHESH_INTERNSHIP_2014/ENZOWP2/2WC5_090715_170128/E3P/E3P.B99990002.pdb']
''' /Users/Mahesh/Documents/MAHESH_INTERNSHIP_2014/ENZOWP2/2WC5_090715_170128/E3P/E3P.B99990001.pdb=[
'ATOM 138 SG CYS 19 4.499 4.286 8.260 1.00 71.96 S',
'ATOM 397 SG CYS 50 14.897 3.238 9.338 1.00 34.60 S',
'ATOM 424 SG CYS 54 5.649 5.914 8.639 1.00 42.68 S',
'ATOM 774 SG CYS 97 12.114 -6.864 23.897 1.00 62.23 S',
'ATOM 865 SG CYS 108 15.200 3.910 11.227 1.00 54.49 S' ]
/Users/Mahesh/Documents/MAHESH_INTERNSHIP_2014/ENZOWP2/2WC5_090715_170128/E3P/E3P.B99990002.pdb=[
'ATOM 929 SG CYS 117 13.649 -6.894 22.589 1.00106.90 S',
'ATOM 138 SG CYS 19 4.499 4.286 8.260 1.00 71.96 S',
'ATOM 397 SG CYS 50 14.897 3.238 9.338 1.00 34.60 S',
'ATOM 424 SG CYS 54 5.649 5.914 8.639 1.00 42.68 S',
'ATOM 774 SG CYS 97 12.114 -6.864 23.897 1.00 62.23 S',
'ATOM 865 SG CYS 108 15.200 3.910 11.227 1.00 54.49 S',
'ATOM 929 SG CYS 117 13.649 -6.894 22.589 1.00106.90 S' ] '''
for path in pdbPathAndName:
f = open(path, 'r').readlines()
f = map(lambda x: x.strip(), f)
for line in f:
if "SG" in line and line.endswith("S"):
print (path.split("/")[-1] + "_" + re.split('\s+', line)[1] + ":" + re.split('\s+', line)[5] + ":" +re.split('\s+', line)[6] + ":" + re.split('\s+', line)[7])
#PRINTED OUTPUT
'''E3P.B99990001.pdb_138:6.923:0.241:6.116
E3P.B99990001.pdb_397:15.856:3.506:8.144
E3P.B99990001.pdb_424:8.558:1.315:6.627
E3P.B99990001.pdb_774:14.204:-5.490:24.812
E3P.B99990001.pdb_865:15.545:4.258:10.007
E3P.B99990001.pdb_929:16.146:-6.081:24.770
E3P.B99990002.pdb_138:4.499:4.286:8.260
E3P.B99990002.pdb_397:14.897:3.238:9.338
E3P.B99990002.pdb_424:5.649:5.914:8.639
E3P.B99990002.pdb_774:12.114:-6.864:23.897
E3P.B99990002.pdb_865:15.200:3.910:11.227
E3P.B99990002.pdb_929:13.649:-6.894:22.589'''
#MY EXPECTED OUTPUT
''' MainlIst=[
['E3P.B99990001.pdb_138:6.923:0.241:6.116'
'E3P.B99990001.pdb_397:15.856:3.506:8.144'
'E3P.B99990001.pdb_424:8.558:1.315:6.627'
'E3P.B99990001.pdb_774:14.204:-5.490:24.812'
'E3P.B99990001.pdb_865:15.545:4.258:10.007'
'E3P.B99990001.pdb_929:16.146:-6.081:24.770']#sublist1
['E3P.B99990002.pdb_138:4.499:4.286:8.260'
'E3P.B99990002.pdb_397:14.897:3.238:9.338'
'E3P.B99990002.pdb_424:5.649:5.914:8.639'
'E3P.B99990002.pdb_774:12.114:-6.864:23.897'
'E3P.B99990002.pdb_929:13.649:-6.894:22.589']#sublist2
]'''
#then use thes sublists to make combinations
for sublists in mainlist:
Combinatedlist=map(dict,itertools.combinations(sublists.iteritems(), 2))
#since it is sublist there wont be any crossing between sublist1 and sublist2 while doing combinations
#but still I didnt get proper result if you can then suggest me your ways
Hi guys I got an answer for this by just including particular pattern between each blogs and spitted based on the same to make sub lists then made a combination out of it
My code:
import fileinput
import os
import re
import itertools
import math
import sys
pdbPathAndName = ['/Users/Mahesh/Documents/MAHESH_INTERNSHIP_2014/ENZOWP2/2WC5_090715_170128/E3P/E3P.B99990001.pdb','/Users/Mahesh/Documents/MAHESH_INTERNSHIP_2014/ENZOWP2/2WC5_090715_170128/E3P/E3P.B99990002.pdb']
ATOM_COORDINATE=[]
for path in pdbPathAndName:
f = open(path, 'r').readlines()
f = map(lambda x: x.strip(), f)
for line in f:
if "SG" in line and line.endswith("S"):
ATOM_COORDINATE.append(path.split("/")[-1] + "_" + re.split('\s+', line)[1] + ":" + re.split('\s+', line)[5] + ":" +re.split('\s+', line)[6] + ":" + re.split('\s+', line)[7])
ATOM_COORDINATE.append("foo")
#Making Mainlist with sublists by splitting "foo" pattern
sub = []
for item in ATOM_COORDINATE:
if item == 'foo':
ATOM_COORDINATE.append(sub)
sub = []
else:
sub.append(item)
#Making combinations out of sublists
COMBINATION=[]
for sublists in sub:
for L in range(2, len(sublists), 4):
for subset in itertools.combinations(sublists, L):
COMBINATION.append(subset)
OUTPUT:
MainlistWithSublists:
[['E3P.B99990001.pdb_138:6.923:0.241:6.116', 'E3P.B99990001.pdb_397:15.856:3.506:8.144', 'E3P.B99990001.pdb_424:8.558:1.315:6.627', 'E3P.B99990001.pdb_774:14.204:-5.490:24.812', 'E3P.B99990001.pdb_865:15.545:4.258:10.007', 'E3P.B99990001.pdb_929:16.146:-6.081:24.770'], ['E3P.B99990002.pdb_138:4.499:4.286:8.260', 'E3P.B99990002.pdb_397:14.897:3.238:9.338', 'E3P.B99990002.pdb_424:5.649:5.914:8.639', 'E3P.B99990002.pdb_774:12.114:-6.864:23.897', 'E3P.B99990002.pdb_865:15.200:3.910:11.227', 'E3P.B99990002.pdb_929:13.649:-6.894:22.589']]
Combination out of sublists:
[('E3P.B99990001.pdb_138:6.923:0.241:6.116', 'E3P.B99990001.pdb_397:15.856:3.506:8.144'), ('E3P.B99990001.pdb_138:6.923:0.241:6.116', 'E3P.B99990001.pdb_424:8.558:1.315:6.627'), ('E3P.B99990001.pdb_138:6.923:0.241:6.116', 'E3P.B99990001.pdb_774:14.204:-5.490:24.812'), ('E3P.B99990001.pdb_138:6.923:0.241:6.116', 'E3P.B99990001.pdb_865:15.545:4.258:10.007'), ('E3P.B99990001.pdb_138:6.923:0.241:6.116', 'E3P.B99990001.pdb_929:16.146:-6.081:24.770'), ('E3P.B99990001.pdb_397:15.856:3.506:8.144', 'E3P.B99990001.pdb_424:8.558:1.315:6.627'), ('E3P.B99990001.pdb_397:15.856:3.506:8.144', 'E3P.B99990001.pdb_774:14.204:-5.490:24.812'), ('E3P.B99990001.pdb_397:15.856:3.506:8.144', 'E3P.B99990001.pdb_865:15.545:4.258:10.007'), ('E3P.B99990001.pdb_397:15.856:3.506:8.144', 'E3P.B99990001.pdb_929:16.146:-6.081:24.770'), ('E3P.B99990001.pdb_424:8.558:1.315:6.627', 'E3P.B99990001.pdb_774:14.204:-5.490:24.812'), ('E3P.B99990001.pdb_424:8.558:1.315:6.627', 'E3P.B99990001.pdb_865:15.545:4.258:10.007'), ('E3P.B99990001.pdb_424:8.558:1.315:6.627', 'E3P.B99990001.pdb_929:16.146:-6.081:24.770'), ('E3P.B99990001.pdb_774:14.204:-5.490:24.812', 'E3P.B99990001.pdb_865:15.545:4.258:10.007'), ('E3P.B99990001.pdb_774:14.204:-5.490:24.812', 'E3P.B99990001.pdb_929:16.146:-6.081:24.770'), ('E3P.B99990001.pdb_865:15.545:4.258:10.007', 'E3P.B99990001.pdb_929:16.146:-6.081:24.770'), ('E3P.B99990002.pdb_138:4.499:4.286:8.260', 'E3P.B99990002.pdb_397:14.897:3.238:9.338'), ('E3P.B99990002.pdb_138:4.499:4.286:8.260', 'E3P.B99990002.pdb_424:5.649:5.914:8.639'), ('E3P.B99990002.pdb_138:4.499:4.286:8.260', 'E3P.B99990002.pdb_774:12.114:-6.864:23.897'), ('E3P.B99990002.pdb_138:4.499:4.286:8.260', 'E3P.B99990002.pdb_865:15.200:3.910:11.227'), ('E3P.B99990002.pdb_138:4.499:4.286:8.260', 'E3P.B99990002.pdb_929:13.649:-6.894:22.589'), ('E3P.B99990002.pdb_397:14.897:3.238:9.338', 'E3P.B99990002.pdb_424:5.649:5.914:8.639'), ('E3P.B99990002.pdb_397:14.897:3.238:9.338', 'E3P.B99990002.pdb_774:12.114:-6.864:23.897'), ('E3P.B99990002.pdb_397:14.897:3.238:9.338', 'E3P.B99990002.pdb_865:15.200:3.910:11.227'), ('E3P.B99990002.pdb_397:14.897:3.238:9.338', 'E3P.B99990002.pdb_929:13.649:-6.894:22.589'), ('E3P.B99990002.pdb_424:5.649:5.914:8.639', 'E3P.B99990002.pdb_774:12.114:-6.864:23.897'), ('E3P.B99990002.pdb_424:5.649:5.914:8.639', 'E3P.B99990002.pdb_865:15.200:3.910:11.227'), ('E3P.B99990002.pdb_424:5.649:5.914:8.639', 'E3P.B99990002.pdb_929:13.649:-6.894:22.589'), ('E3P.B99990002.pdb_774:12.114:-6.864:23.897', 'E3P.B99990002.pdb_865:15.200:3.910:11.227'), ('E3P.B99990002.pdb_774:12.114:-6.864:23.897', 'E3P.B99990002.pdb_929:13.649:-6.894:22.589'), ('E3P.B99990002.pdb_865:15.200:3.910:11.227', 'E3P.B99990002.pdb_929:13.649:-6.894:22.589')]
Thanks to all
If you can, just use a dictionary:
Output (dictionary
d):If you really need to use a list of lists instead of a dict, you can just convert this back to a list:
You can sort it using
sorted(l)if you prefer a sorted version.