入力ファイルPDBからNADリガンドIDを鎖方向に抽出しようとしています。次のように私は、出力ファイルを保存したい:入力ファイルが1AHI.pbd
で、4つの鎖A、B、C及びDが含まれている場合、出力は別々のファイルでなければなりませんPDBテキストファイルを各行の内容に基づいていくつかのファイルに分割します
1AHI_A.txt
1AHI_B.txt
1AHI_C.txt
1AHI_D.txt
下の私のスクリプトが期待される出力を与えていません。スクリプト内で論理的な問題があるかもしれません。私はまた、何かエラーを取得しています。
from glob import glob
in_loc = 'C:/Users/Documents/NAD/NAD/result/test_result_file/'
out_loc = 'C:/Users/Documents/NAD/NAD/result/test_result_file/output/'
def test():
fnames = glob(in_loc+'*.pdb')
for each in fnames:
# This is the new generated file out of input file (.txt).
formatted_file = each.replace('pdb', 'txt')
formatted_file = formatted_file.replace(in_loc, out_loc)
# This is the input file
in_f = open(each, 'r')
# A new file to be opened.
out_f = open(formatted_file, "w")
# Filtering results from input file
try:
out_chain_list = filter_file(in_f)
for each_line in out_chain_list:
out_f.write(each_line)
# Closing all the opened files.
out_f.close()
in_f.close()
except Exception as e:
print('Exception for file: ', each, '\n', e)
out_f.close()
in_f.close()
def filter_file(in_f):
ligand_id = ['NAD']
chain_ids = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
previous_chain_id = None
chain_list = []
out_chain_list = []
for each in fnames:
for line in map(str.rstrip, fnames):
if line[:6] != "HETATM":
continue
chainID = line[21:22]
ligandID = line[11:14].strip()
if ligandID in ligandID and chain_id in chain_ids:
if chain_id != previous_chain_id:
c_ls = []
if c_ls:
out_file_name = in_f.name.replace(in_loc, out_loc)
out_file_name = out_file_name.replace('.pdb', '_'+previous_chain_id+'.txt')
out_file = open(out_file_name, "w")
for l in c_ls:
out_file.write(l)
out_file.close()
chain_list.append(line)
previous_chain_id = chain_id
out_chain_list += c_ls
return out_chain_list
test()
例:
入力ファイル:何か
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:チェーン出力(OUTファイルを置く)
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(入力ファイルの3番目の列)を抽出し、出力ファイルをチェーン別に保存したいと考えています。ここで
ほとんどの人はPDBファイルとリガンドに慣れていませんあなたがしようとしていることを説明するためのデータの例を示します。期待される成果とは何か、代わりに何を得るのですか?できるだけ簡単な例に減らしてください。また、エラーメッセージが表示されているかどうかはわかりませんが、そうであればどうしますか? – nekomatic