2013-09-21 25 views
2

條件假設我有以下文件(其是PDB format會議3個從文件

 ATOM  1 N MET A 1  66.104 56.583 -35.505 1.00 0.00   N 
    ATOM  2 CA MET A 1  66.953 57.259 -36.531 1.00 0.00   C 
    ATOM  3 C MET A 1  67.370 56.262 -37.627 1.00 0.00   C 
    ATOM  4 O MET A 1  67.105 55.079 -37.531 1.00 0.00   O 
    ATOM  5 CB MET A 1  68.227 57.852 -35.867 1.00 0.00   C 
    ATOM  6 CG MET A 1  67.848 58.995 -34.899 1.00 0.00   C 
    ATOM  7 SD MET A 1  66.880 58.593 -33.421 1.00 0.00   S 
    ATOM  8 CE MET A 1  68.253 58.332 -32.269 1.00 0.00   C 
    ATOM  9 H1 MET A 1  66.566 56.636 -34.576 1.00 0.00   H 
    ATOM  10 H2 MET A 1  65.969 55.585 -35.765 1.00 0.00   H 
    ATOM  11 H3 MET A 1  65.179 57.056 -35.460 1.00 0.00   H 
    ATOM  12 HA MET A 1  66.373 58.046 -36.989 1.00 0.00   H 
    ATOM  13 HB2 MET A 1  68.743 57.078 -35.317 1.00 0.00   H 
    ATOM  14 HB3 MET A 1  68.894 58.236 -36.625 1.00 0.00   H 
    ATOM  15 HG2 MET A 1  68.760 59.479 -34.578 1.00 0.00   H 
    ATOM  16 HG3 MET A 1  67.283 59.729 -35.455 1.00 0.00   H 
    ATOM  17 HE1 MET A 1  68.880 57.524 -32.617 1.00 0.00   H 
    ATOM  18 HE2 MET A 1  67.847 58.062 -31.306 1.00 0.00   H 
    ATOM  19 HE3 MET A 1  68.822 59.245 -32.159 1.00 0.00   H 
    ATOM  21 CA ALA A 2  68.498 55.965 -39.793 1.00 0.00   C 
    ATOM  22 C ALA A 2  70.028 56.064 -39.893 1.00 0.00   C 
    ATOM  23 O ALA A 2  70.561 56.995 -40.466 1.00 0.00   O 
    ATOM  30 N THR A 3  70.681 55.084 -39.321 1.00 0.00   N 
    ATOM  24 CA ALA A 2  67.833 56.491 -41.076 1.00 0.00   C 
    ATOM  25 H ALA A 2  68.194 57.752 -38.637 1.00 0.00   H 
    ATOM  26 HA ALA A 2  68.226 54.930 -39.645 1.00 0.00   H 
    ATOM  27 HB1 ALA A 2  66.760 56.401 -40.994 1.00 0.00   H 
    ATOM  28 HB2 ALA A 2  68.167 55.915 -41.926 1.00 0.00   H 
    ATOM  29 HB3 ALA A 2  68.085 57.529 -41.233 1.00 0.00   H 
    ATOM  30 N THR A 3  70.681 55.084 -39.321 1.00 0.00   N 
    ATOM  31 CA THR A 3  72.178 55.028 -39.324 1.00 0.00   C 
    ATOM  32 C THR A 3  72.651 53.933 -40.300 1.00 0.00   C 

我想這樣做一些過程中,如果N,CA和C都是在該文件中存在順序(這條件對於殘留物1和3是成立的,但對於殘留物2是成立的)。第6欄顯示殘留物編號。如果我寫如下。

 if line[0:6]=='ATOM ': 
     if line[12:16]==' N ' or line[12:16]==' CA ' or line[12:16]==' C ': 
      do some process 

但是這種情況對於其中「N,CA,C」不是順序的殘基2也是如此。只有在「N,CA,C」序列中,如何修改上述代碼才能執行該過程?提前致謝。

+1

您應該認真考慮[pandas](http://pandas.pydata.org/)或其他工具。 –

+0

在你的代碼中,它應該是'for f'中的行,而不是'fn中的行'('fn'是文件名)。另外'line [0:6]'永遠不會是'ATOM',因爲ATOM是5個字符(它應該是'line [0:5]')。我無法對真實文件進行測試,因爲在wwPDB.org上浪費了一些時間後,我無法找到從哪裏下載.pdb文件。 – 6502

+1

'A'是一個,'T'是另一個'O'是第三個,'M'是第四個,空間是第五個。我錯過了什麼嗎?如果我們包含上面代碼中所示的兩個空格,那麼使用該文件「工作」(多次打印文件名...) – 6502

回答

2

你可以保持一個三元素的隊列

q = [None] * 3 
for line in lines: 
    if line[0:5] == "ATOM ": 
     q[0] = q[1]; q[1] = q[2]; q[2] = line[12:16] 
     if q == [" N ", " CA ", " C "]: 
      ... found a match ... 

如果其他元素允許(但你需要N,CA和C的順序),您可以輸入在隊列中的元素,只有當他們是N ,CA或C忽略其他元素。

將此處理擴展爲同時搜索​​不同序列也很容易。

+0

@ user2176228:'lines'是我認爲包含文件行的名稱。你也可以在open(「myfile.dat」)中編寫''line':'在讀取文件時直接循環(請不要發表評論說'myfile.dat'不存在;-)) – 6502

+0

This答案似乎沒問題,但我認爲最好做'tokens = line.split('')'然後刪除空元素'filter(lambda a:a!='',tokens)'',然後檢查值。 – Mehraban

+0

@SAM:我不同意。這似乎是一個固定的記錄文件格式,只是訪問特定的字符是IMO更好。當然,我從來沒有聽說過這種文件格式,所以我不能100%確定。 – 6502