2016-01-29 121 views
0

计划获取只有一个结果,而不是多个结果

f=open('something.txt'.'r') 
lines=f.readlines() 
for read in range(0,len(lines)): 
    c=lines[read] 
    d=lines[read] 
    if c[0:4]=='ATOM': 
     AX1=float(c[32:38]) 
     AY1=float(c[40:46]) 
     AZ1=float(c[48:54]) 
     A1=c[77] 
    if d[0:6]=='HETATM': 
     HX1=float(d[32:38]) 
     HY1=float(d[40:46]) 
     HZ1=float(d[48:54]) 
     H1=d[77] 
    distance=math.sqrt((HX1-AX1)**2+(HY1-AY1)**2+(HZ1-AZ1)**2) 
    print 'Distance b/w ',A1,' and ',H1,'',distance 

文件会像:

ATOM  1 N ALA A 4  15.660 74.786 38.080 1.00 29.54   N 
ATOM  2 CA ALA A 4  15.546 74.666 39.526 1.00 27.64   C 
ATOM  3 C ALA A 4  16.833 74.137 40.145 1.00 25.88   C 
ATOM  4 O ALA A 4  17.852 73.890 39.500 1.00 24.05   O 
. 
. 
. 
ATOM 6048 OXT ALA A 780  21.816 67.407 16.290 1.00 13.41   O 

HETATM 6050 C1 GLC A2002  5.415 71.753 22.098 1.00 21.40   C 
HETATM 6051 C2 GLC A2002  3.948 71.252 22.308 1.00 21.24   C 
HETATM 6052 C3 GLC A2002  3.065 71.966 21.254 1.00 20.81   C 
HETATM 6053 C4 GLC A2002  3.266 73.512 21.425 1.00 20.10   C 
HETATM 6054 C5 GLC A2002  4.737 73.893 21.253 1.00 21.47   C 
HETATM 6055 C6 GLC A2002  4.967 75.396 21.466 1.00 22.53   C 
HETATM 6056 O1 GLC A2002  6.224 71.231 23.190 1.00 22.04   O 
HETATM 6057 O2 GLC A2002  3.902 69.831 22.018 1.00 21.46   O 
HETATM 6058 O3 GLC A2002  1.682 71.659 21.493 1.00 21.68   O 
HETATM 6059 O4 GLC A2002  2.509 74.212 20.404 1.00 17.87   O 
HETATM 6060 O5 GLC A2002  5.516 73.179 22.244 1.00 21.76   O 
HETATM 6061 O6 GLC A2002  6.361 75.746 21.230 1.00 24.18   O 

我要计算使用上述公式的值。它应该将ATOM-1与所有的HETATM和ATOM-2相比较,以便与所有的HETATM进行比较。

但我得到的结果只有最后一个原子,而HETATM

结果

Distance b/w O and C 17.9335824921 
Distance b/w O and C 19.2422912617 
Distance b/w O and C 19.925505715 
Distance b/w O and C 20.1926162247 
Distance b/w O and C 18.9312388924 
Distance b/w O and C 19.3521031932 
Distance b/w O and O 17.4740790888 
Distance b/w O and O 18.963047118 
Distance b/w O and O 21.2256606258 
Distance b/w O and O 20.8804518629 
Distance b/w O and O 18.2881409662 
Distance b/w O and O 18.2427943583 
+0

这才是真正的代码? 'open('something.txt'。'r')'无效。 –

+0

你经历所有的原子一行行你打任何HETATM之前,所以你开始HETATM之前的最后一个ATOM的数据被保存,和你比较的是ATOM所有HETATM。 – Ryan

回答

2

的问题是与此块在这里:

lines=f.readlines() 
for read in range(0,len(lines)): 
    c=lines[read] 
    d=lines[read] 

你只有一次循环,和分配cd在一个时间在同一行。

相反,你要循环一次c,并一次d。更Python的方式做,这是直接在lines循环,而不是range(0, len(lines))

lines=f.readlines() 
for c in lines: 
    for d in lines: 
     # the rest of your code 

此外,由Ryan指出的那样,你是不是有A1H1做任何事情时,有不匹配,所以你可能在不经意间从以前的循环比较的旧数据。一定要在失败ifelse语句跳过的情况下,或许还有一个continue

if c[0:4]=='ATOM': 
    AX1=float(c[32:38]) 
    AY1=float(c[40:46]) 
    AZ1=float(c[48:54]) 
    A1=c[77] 
else: 
    continue 
+0

谢谢@mhlester :)它的工作。 –

+0

'进口水珠 进口数学 F =开放( 'data.txt中', 'R') Q = f.readlines() 对于i在范围(0,LEN(Q)): \t B = Q [ I] \t一个= b.rstrip() \t一个= a.lower() \t链= A [4] \t F =开放('/家庭/ IITM/Bond_Distance/{}。txt'.format(一个[0:4]), 'R') \t线= f.readlines() \t对C中的行: \t \t如果c [21] == {}格式([4]):'当我尝试这样得到这样的错误,帮助我 '文件 “bond_length.py”,第13行,在 如果c [21] == {}格式([4]): IndexError:字符串索引超出range'的 –