根据每个lin的内容将PDB文本文件拆分为多个文件

2024-09-30 14:15:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从PDB输入文件中提取NAD配体id的链式。我想按如下方式保存输出文件:如果输入文件是1AHI.pbd,并且包含四个链A、B、C和D,那么输出应该是单独的文件

1AHI_A.txt
1AHI_B.txt
1AHI_C.txt
1AHI_D.txt

我下面的脚本没有给出预期的输出。可能是脚本中的某些逻辑问题。我也有任何错误。在

^{pr2}$

示例:

输入文件:类似

HETATM15202  PA  NAD A 501      44.008 102.331   5.491  1.00 11.48           P  
HETATM15203  O1A NAD A 501      43.295 103.140   6.507  1.00 11.48           O  
HETATM15204  O2A NAD A 501      42.939 101.407   4.919  1.00 11.48           O  
HETATM15205  O5B NAD A 501      45.052 101.397   6.166  1.00 11.48           O  
HETATM15247  PA  NAD B 501      36.790 111.512  38.592  1.00 11.25           P  
HETATM15248  O1A NAD B 501      37.248 110.563  37.565  1.00 11.25           O  
HETATM15249  O2A NAD B 501      35.692 110.795  39.337  1.00 11.25           O  
HETATM15250  O5B NAD B 501      36.174 112.802  37.915  1.00 11.25           O  
HETATM15292  PA  NAD C 501     100.016 130.669  21.776  1.00 12.28           P  
HETATM15293  O1A NAD C 501      99.311 131.864  22.293  1.00 12.28           O  
HETATM15294  O2A NAD C 501     101.501 131.009  21.932  1.00 12.28           O  
HETATM15295  O5B NAD C 501      99.727 130.510  20.238  1.00 12.28           O  
HETATM15337  PA  NAD D 501      78.237 158.792  22.383  1.00 11.99           P  
HETATM15338  O1A NAD D 501      79.297 157.907  21.808  1.00 11.99           O  
HETATM15339  O2A NAD D 501      78.807 160.217  22.362  1.00 11.99           O  
HETATM15340  O5B NAD D 501      78.069 158.416  23.905  1.00 11.99           O  

预期输出:

1AHI_A.txt:链输出(输出文件)

HETATM15202  PA  NAD A 501      44.008 102.331   5.491  1.00 11.48           P  
HETATM15203  O1A NAD A 501      43.295 103.140   6.507  1.00 11.48           O  
HETATM15204  O2A NAD A 501      42.939 101.407   4.919  1.00 11.48           O  
HETATM15205  O5B NAD A 501      45.052 101.397   6.166  1.00 11.48           O  

1AHI_B.txt:B链输出(输出文件)

HETATM15247  PA  NAD B 501      36.790 111.512  38.592  1.00 11.25           P  
HETATM15248  O1A NAD B 501      37.248 110.563  37.565  1.00 11.25           O  
HETATM15249  O2A NAD B 501      35.692 110.795  39.337  1.00 11.25           O  
HETATM15250  O5B NAD B 501      36.174 112.802  37.915  1.00 11.25           O  

1AHI_C.txt:C链输出(输出文件)

HETATM15292  PA  NAD C 501     100.016 130.669  21.776  1.00 12.28           P  
HETATM15293  O1A NAD C 501      99.311 131.864  22.293  1.00 12.28           O  
HETATM15294  O2A NAD C 501     101.501 131.009  21.932  1.00 12.28           O  
HETATM15295  O5B NAD C 501      99.727 130.510  20.238  1.00 12.28           O  

1AHI_D.txt:D链输出(输出文件)

HETATM15337  PA  NAD D 501      78.237 158.792  22.383  1.00 11.99           P  
HETATM15338  O1A NAD D 501      79.297 157.907  21.808  1.00 11.99           O  
HETATM15339  O2A NAD D 501      78.807 160.217  22.362  1.00 11.99           O  
HETATM15340  O5B NAD D 501      78.069 158.416  23.905  1.00 11.99           O  

我希望这能帮助你理解。在

我想提取NAD(在输入文件的第三列)并用链式方式保存输出文件。在


Tags: 文件txt脚本方式链式pao2anad
1条回答
网友
1楼 · 发布于 2024-09-30 14:15:28

下面是一些代码,它们将读取fileName指定的PDB文件,并为找到的每个配体ID编写一个输出文件,其中包含输入文件中以HETATM开头并包含NAD的行和一个从A到{}的字母:

import os

fileName = 'C:\\path\\to\\file.pdb'
baseName = os.path.splitext(fileName)[0] # get filename without extension

# Read the lines from the input file that have 'HETATM' and 'NAD' in the 
# correct positions into a list:
with open(fileName) as f:
    linesNAD = [li for li in f if li[0:6] == 'HETATM' and li[17:20] == 'NAD']

# Build a set of the chains found in the lines we have read in:
chains = {li[21] for li in linesNAD if li[21] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}

# For each chain, create an output file and write the lines for that chain:
for chain in chains:
    outfileName = baseName + '_' + chain + '.txt'
    with open(outfileName, 'w') as o:
        o.writelines([li for li in linesNAD if li[21] == chain])

如果要处理多个输入文件、陷阱错误等,则可以添加到该文件中。注意列表和集合理解的使用,它们通常是转换或过滤一组数据的非常简洁的方法。如果您需要这些构造的更多细节,请参阅Python帮助。在

我已经在Python3.5上测试过了,但是它应该可以在一些早期版本中使用——我认为在2.7中可以使用集合理解,但是我不确定with结构是什么时候引入的。如果它在您的版本中不起作用,只需像您在原始代码中那样打开这些文件(但不要忘记在以后close()它们!)在

相关问题 更多 >

    热门问题