#python #python-2.7 #python-3.x #bioinformatics
#питон #python-2.7 #python-3.x #биоинформатика
Вопрос:
Я пытаюсь добавить еще один абзац, но получаю ошибку? Я могу напечатать первые три абзаца, но пока я пытаюсь добавить еще один абзац, получаю ошибку. Кто-нибудь может, пожалуйста, поправить?
Входной файл:
HETATM10910 C4B NAD A 363 60.856 -58.575 149.282 1.00 40.44 C
HETATM10911 O4B NAD A 363 61.320 -59.488 148.275 1.00 43.48 O
HETATM10912 C3B NAD A 363 60.243 -57.426 148.473 1.00 40.37 C
HETATM10914 C2B NAD A 363 60.167 -57.970 147.054 1.00 40.90 C
HETATM10916 C1B NAD A 363 61.394 -58.766 147.056 1.00 43.29 C
HETATM10954 C4B NAD B 363 41.496 -54.407 140.932 1.00 39.26 C
HETATM10955 O4B NAD B 363 41.936 -54.715 139.568 1.00 41.96 O
HETATM10956 C3B NAD B 363 42.061 -55.476 141.894 1.00 37.13 C
HETATM10958 C2B NAD B 363 42.883 -56.336 140.942 1.00 38.13 C
HETATM10960 C1B NAD B 363 42.233 -56.127 139.593 1.00 42.92 C
Я хочу распечатать данные в соответствии со следующим:
HETATM 3788 C4B NAI A 302 52.695 15.486 8.535 1.00 57.28 C
HETATM 3789 O4B NAI A 302 52.258 14.631 7.456 1.00 56.26 O
HETATM 3794 C1B NAI A 302 53.348 13.816 7.022 1.00 53.44 C
HETATM 3792 C2B NAI A 302 54.537 14.748 7.190 1.00 50.93 C
HETATM 3789 O4B NAI A 302 52.258 14.631 7.456 1.00 56.26 O
HETATM 3794 C1B NAI A 302 53.348 13.816 7.022 1.00 53.44 C
HETATM 3792 C2B NAI A 302 54.537 14.748 7.190 1.00 50.93 C
HETATM 3790 C3B NAI A 302 54.225 15.525 8.465 1.00 52.99 C
HETATM 3794 C1B NAI A 302 53.348 13.816 7.022 1.00 53.44 C
HETATM 3792 C2B NAI A 302 54.537 14.748 7.190 1.00 50.93 C
HETATM 3790 C3B NAI A 302 54.225 15.525 8.465 1.00 52.99 C
HETATM 3788 C4B NAI A 302 52.695 15.486 8.535 1.00 57.28 C
HETATM 3792 C2B NAI A 302 54.537 14.748 7.190 1.00 50.93 C
HETATM 3790 C3B NAI A 302 54.225 15.525 8.465 1.00 52.99 C
HETATM 3788 C4B NAI A 302 52.695 15.486 8.535 1.00 57.28 C
HETATM 3789 O4B NAI A 302 52.258 14.631 7.456 1.00 56.26 O
HETATM 3790 C3B NAI A 302 54.225 15.525 8.465 1.00 52.99 C
HETATM 3788 C4B NAI A 302 52.695 15.486 8.535 1.00 57.28 C
HETATM 3789 O4B NAI A 302 52.258 14.631 7.456 1.00 56.26 O
HETATM 3794 C1B NAI A 302 53.348 13.816 7.022 1.00 53.44 C
та же ложь, что и для каждой цепочки. Идентификатор цепочки может быть от A до H.
Код:
import os
import sys
d = {}
chainIDs = ('A', 'B', 'C', 'D',)
atomIDs = ('C4B', 'O4B', 'C1B', 'C2B', 'C3B', 'C4B')
with open('1A7K.pdb') as pdbfile:
for line in map(str.rstrip, pdbfile):
if line[:6] != "HETATM":
continue
chainID = line[21:22]
atomID = line[13:16].strip()
if chainID not in chainIDs:
continue
if atomID not in atomIDs:
continue
try:
d[chainID][atomID] = line
except KeyError:
d[chainID] = {atomID: line}
n = 4
for chain, atoms in d.items():
for atom, line in atoms.items():
for i in range(len(atom)-n 1):
for j in range(n):
print d[chain][atomIDs[i j]]
print
Сообщение является:
runfile('C:/Users/Desktop/test_python_2.py', wdir='C:/Users/Desktop')
Комментарии:
1. Ошибка гласит: »
i
является целочисленным значением. Вы не можете использоватьlen
на нем «. Подумайте об использованииfor j in range(i-n 1):
2. @cel, используемый скрипт запущен, но не получает результата? сообщение: runfile(‘C:/Users/Desktop/test_python_2.py ‘, wdir=’C:/Users/Desktop ‘)
Ответ №1:
В вашем коде
for i in range(len(atomIDs)-n 1):
for j in range(len(i)-n 1):
for k in range(len((j))-n 1):
for l in range(n):
вы берете длину i
и j
. Это целые числа (полученные из диапазона), и, как указано в полученной вами ошибке, int
объекты не имеют длины как таковой (по крайней мере len
, в том, что касается функции Python).
Что именно вы пытаетесь сделать с этими циклами for? Если вы хотите напечатать каждую строку для каждой цепочки и атома, будет ли работать что-то вроде следующего?
for chain, atoms in d.items():
for atom, line in atoms.items():
print line
Комментарии:
1. @kdmurray, я отредактировал свой код, но не получил ожидаемого результата?
2. Не могли бы вы, пожалуйста, подсказать мне, как добавить каталог ввода и вывода? Я хочу взять входной файл из входной папки, а выходные данные будут сохранены в выходной папке с тем же именем входного файла.