2014-12-21 3 views
2

텍스트 파일을 정렬해야합니다. 파일에 줄이 포함되어 있으며 줄 바꿈은 '\n'입니다. 예 입력 :특정 열을 기준으로 문자열 정렬

ATOM 1591 O5' G A 958  5.497 -3.281 3.598 1.00 99.99   O 
ATOM 1592 C5' G A 958  4.345 -3.184 2.781 1.00 99.99   C 
ATOM  1 P  C A 924  -12.106 6.485 -14.650 1.00 99.99   P 
ATOM  2 OP1 C A 924  -12.981 6.565 -15.850 1.00 99.99   O 
ATOM  3 OP2 C A 924  -10.829 7.256 -14.620 1.00 99.99   O 
ATOM 429 2H4 C A 947  1.295 -1.142 -0.764 1.00 99.99   H 
ATOM 430 P  G A 948  -2.886 -4.112 7.863 1.00 99.99   P 

그리고 나는 이런 식으로 일을 내가 해봤

ATOM  1 P  C A 924  -12.106 6.485 -14.650 1.00 99.99   P 
ATOM  2 OP1 C A 924  -12.981 6.565 -15.850 1.00 99.99   O 
ATOM  3 OP2 C A 924  -10.829 7.256 -14.620 1.00 99.99   O 
ATOM 429 2H4 C A 947  1.295 -1.142 -0.764 1.00 99.99   H 
ATOM 430 P  G A 948  -2.886 -4.112 7.863 1.00 99.99   P 
ATOM 1591 O5' G A 958  5.497 -3.281 3.598 1.00 99.99   O 
ATOM 1592 C5' G A 958  4.345 -3.184 2.781 1.00 99.99   C 

6 열 (958, 924 등)으로 정렬 할 :

splitted = pdb_data.splitlines() 
sorted(splitted, key = lambda residue: int(residue.split()[5])) 
pdb_data = '\n'.join(splitted) 
pdb_data +='\nTER\n' 

하지만 정렬되지 않았습니다. :/

답변

2

잘못된 정렬 방법을 사용하고 있습니다. 정렬되지 않은 원래의 목록을 떠나

splitted.sort(key = lambda residue: int(residue.split()[5])) 

sorted() function 리턴한다 새 목록,하지만 코드는 반환 값을 무시 : 장소에 정렬, list.sort() method를 사용합니다.

sorted()의 반환 값을 splitted으로 다시 할당 할 수도 있지만 여기에서는 다소 비효율적입니다.

귀하의 종류 자체는 잘 작동합니다 :

>>> splitted = '''\ 
... ATOM 1591 O5' G A 958  5.497 -3.281 3.598 1.00 99.99   O 
... ATOM 1592 C5' G A 958  4.345 -3.184 2.781 1.00 99.99   C 
... ATOM  1 P  C A 924  -12.106 6.485 -14.650 1.00 99.99   P 
... ATOM  2 OP1 C A 924  -12.981 6.565 -15.850 1.00 99.99   O 
... ATOM  3 OP2 C A 924  -10.829 7.256 -14.620 1.00 99.99   O 
... ATOM 429 2H4 C A 947  1.295 -1.142 -0.764 1.00 99.99   H 
... ATOM 430 P  G A 948  -2.886 -4.112 7.863 1.00 99.99   P 
... '''.splitlines() 
>>> splitted.sort(key = lambda residue: int(residue.split()[5])) 
>>> pdb_data = '\n'.join(splitted) 
>>> print pdb_data 
ATOM  1 P  C A 924  -12.106 6.485 -14.650 1.00 99.99   P 
ATOM  2 OP1 C A 924  -12.981 6.565 -15.850 1.00 99.99   O 
ATOM  3 OP2 C A 924  -10.829 7.256 -14.620 1.00 99.99   O 
ATOM 429 2H4 C A 947  1.295 -1.142 -0.764 1.00 99.99   H 
ATOM 430 P  G A 948  -2.886 -4.112 7.863 1.00 99.99   P 
ATOM 1591 O5' G A 958  5.497 -3.281 3.598 1.00 99.99   O 
ATOM 1592 C5' G A 958  4.345 -3.184 2.781 1.00 99.99   C 
관련 문제