2017-11-10 7 views
0

나는 다음과 같은 PDB 형식의 코드가 "new_mol"라고 약 hypotethical 새로운 화학 물질 : 각 라인의 마지막 문자는 원자 기호는하나의 문자열에서 새 사전을 생성하는 함수를 정의

new_mol= """ 
ATOM  45 C BARG A -3  12.759 86.530 96.365 0.50 36.39  C 
ATOM  46 O BARG A -3  12.924 87.757 96.420 0.50 37.26  O 
ATOM  47 CB BARG A -3  13.428 85.746 93.980 0.50 36.60  C 
ATOM  48 CG BARG A -3  12.866 85.172 92.651 0.50 37.31  C 
ATOM  49 CD BARG A -3  13.374 85.886 91.406 0.50 37.66  C 
ATOM  50 NE BARG A -3  12.644 85.487 90.195 0.50 38.24  N 
ATOM  51 CZ BARG A -3  13.114 85.582 88.947 0.50 39.55  C 
ATOM  52 NH1BARG A -3  14.338 86.056 88.706 0.50 40.23  N 

""" 
import os 

.

I는 결과를 얻기 위해 사전을 생성

def count_atom(new_mol): 
num_atoms = dict() 

로서의 기능 정의하고자 :

따라서
#num_atoms = {'C':5, 'O':1; 'N':2} 

I 파이썬에 표시하는 사전을 생성하고자에게 new_mol 변수의 각 원자의 총수.

미리 도움을 주셔서 감사합니다.

+3

안녕하세요! 환영. 정확한 질문 (또는 실제로는 모든 질문)을 잊어 버리지 않았습니다. 코드를 작성할 수 없으므로 시도하면 더 좋을 것입니다. 그런 다음 시도한 것을 보여 주어야합니다. 왜 그것은 작동하지 않았고 문제를 해결하기 위해 물어야 할 질문을합니다. –

+0

입력 문자열은 파일처럼 보입니다. 파일에서 가져온다면 파일을 마지막으로 공백이 아닌 문자를 한 줄씩 계산해서 처리하고, 정말로 문자열이라면'io' 모듈을 사용하여 파일 객체처럼 처리하십시오 :'io.BytesIO' Python 2에서 사용하거나'io.StringIO'에서 Python 3 사용하기 –

답변

0

여기 코드는 요구 사항에 따라 사용할 수 있습니다. 원하는 결과가 result_dict에 있습니다. varriable

new_mol= """ 
ATOM  45 C BARG A -3  12.759 86.530 96.365 0.50 36.39  C 
ATOM  46 O BARG A -3  12.924 87.757 96.420 0.50 37.26  O 
ATOM  47 CB BARG A -3  13.428 85.746 93.980 0.50 36.60  C 
ATOM  48 CG BARG A -3  12.866 85.172 92.651 0.50 37.31  C 
ATOM  49 CD BARG A -3  13.374 85.886 91.406 0.50 37.66  C 
ATOM  50 NE BARG A -3  12.644 85.487 90.195 0.50 38.24  N 
ATOM  51 CZ BARG A -3  13.114 85.582 88.947 0.50 39.55  C 
ATOM  52 NH1BARG A -3  14.338 86.056 88.706 0.50 40.23  N 

""" 
list_of_string = new_mol.split('ATOM') 
result_dict = {} 
for string in list_of_string: 
    chamical_info = string.strip() 
    if chamical_info: 
     print chamical_info[-1] 
     if result_dict.has_key(chamical_info[-1]): 
      result_dict[chamical_info[-1]] = result_dict[chamical_info[-1]] + 1 
     else: 
      result_dict[chamical_info[-1]] = 1 


print result_dict 
0

멋지게 모듈 컬렉션에 클래스 카운터가 있습니다. 당신이 원자의 목록을 hava하면 그냥 Counter(atoms)와 함께 카운터를 만들어야하고 원하는 결과가 있습니다.

from collections import Counter 

new_mol= """ 
ATOM  45 C BARG A -3  12.759 86.530 96.365 0.50 36.39  C 
ATOM  46 O BARG A -3  12.924 87.757 96.420 0.50 37.26  O 
ATOM  47 CB BARG A -3  13.428 85.746 93.980 0.50 36.60  C 
ATOM  48 CG BARG A -3  12.866 85.172 92.651 0.50 37.31  C 
ATOM  49 CD BARG A -3  13.374 85.886 91.406 0.50 37.66  C 
ATOM  50 NE BARG A -3  12.644 85.487 90.195 0.50 38.24  N 
ATOM  51 CZ BARG A -3  13.114 85.582 88.947 0.50 39.55  C 
ATOM  52 NH1BARG A -3  14.338 86.056 88.706 0.50 40.23  N 
""" 

atoms = [line.split()[-1] for line in new_mol.splitlines() if line.startswith('ATOM')] 
atom_count = Counter(atoms)