我有一个看起来像这样的文件:
ATOM 7748 CG2 ILE A 999 53.647 54.338 82.768 1.00 82.10 C
ATOM 7749 CD1 ILE A 999 51.224 54.016 84.367 1.00 83.16 C
ATOM 7750 N ASN A1000 55.338 57.542 83.643 1.00 80.67 N
ATOM 7751 CA ASN A1000 56.604 58.163 83.297 1.00 80.45 C
ATOM 7752 C ASN A1000 57.517 58.266 84.501 1.00 80.30 C
正如您所看到的,“”在第4列和第5列之间消失(从0开始计数)。因此下面的代码失败了。我是python的新手(总共现在整整3天!)并且想知道处理这个问题的最佳方法是什么。只要有空格,line.split()就可以工作。我是否必须进行字符计数,然后使用绝对引用解析字符串?
import string
visited = {}
outputfile = open(file_output_location, "w")
for line in open(file_input_location, "r"):
list = line.split()
id = list[0]
if id == "ATOM":
type = list[2]
if type == "CA":
residue = list[3]
if len(residue) == 4:
residue = residue[1:]
type_of_chain = list[4]
atom_count = int(list[5])
position = list[6:9]
if(atom_count >= 1):
if atom_count not in visited and type_of_chain == chain_required:
visited[atom_count] = 1
result_line = " ".join([residue,str(atom_count),type_of_chain," ".join(position)])
print result_line
print >>outputfile, result_line
outputfile.close()
答案 0 :(得分:1)
使用字符串切片:
print '0123456789'[3:6]
345
那里存在不对称性 - 第一个数字是您需要的第一个字符的从0开始的索引。第二个数字是您不再需要的第一个字符的从0开始的索引。
答案 1 :(得分:1)
PDB文件似乎是固定的列宽文件,而不是空格分隔。因此,如果您必须手动解析它们(而不是使用像pdb-tools这样的现有工具),您需要使用更多类似的东西来修改它们:
id = line[0:4]
type = line[4:9].strip()
# ad nausium
答案 2 :(得分:0)
可能值得安装Biopython,因为它有一个解析PDB的模块。
我在您的示例数据上使用了以下代码:
from Bio.PDB.PDBParser import PDBParser
pdb_reader = PDBParser(PERMISSIVE=1)
structure_id="Test"
filename="Test.pdb" # Enter file name here or path to file.
structure = pdb_reader.get_structure(structure_id, filename)
model = structure[0]
for chain in model: # This will loop over every chain in Model
for residue in chain:
for atom in residue:
if atom.get_name() == 'CA': # get_name strips spaces, use this over get_fullname() or get_id()
print atom.get_id(), residue.get_resname(), residue.get_id()[1], chain.get_id(), atom.get_coord()
# Prints Atom Name, Residue Name, Residue number, Chain Name, Atom Co-Ordinates
打印出来:
CA ASN 1000 A [ 56.60400009 58.1629982 83.29699707]
然后我尝试了一种含有14条链(1aon.pdb)的较大蛋白质,它运行良好。