我需要对文本文件进行排序。该文件包含由新行'\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
我希望按第6列(958
,924
等对其进行排序。)
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
我试过这样做:
splitted = pdb_data.splitlines()
sorted(splitted, key = lambda residue: int(residue.split()[5]))
pdb_data = '\n'.join(splitted)
pdb_data +='\nTER\n'
但它没有排序。 : - /
答案 0 :(得分:2)
您使用错误的方法进行排序;要对进行排序,请使用list.sort()
method:
splitted.sort(key = lambda residue: int(residue.split()[5]))
sorted()
function会返回新列表,原始列表未排序,但您的代码会忽略返回值。
您还可以将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