我正在处理名为.pdb的文件类型,我想将这些行插入2D数组中吗? (文件比这里显示的要好),稍后我想分别检索那些字符(例如:HO2'A 10.000 03'), 您能帮我设计2D数组吗,我对python还是很陌生。谢谢
ATOM 64 HO2' A 2 10.090 1.313 5.546 1.00 0.00 H
ATOM 65 O3' A 2 9.461 -1.229 8.060 1.00 0.00 O
ATOM 66 P G 3 8.676 -0.774 9.370 1.00 0.00 P
ATOM 67 OP1 G 3 9.541 -0.969 10.560 1.00 0.00 O
答案 0 :(得分:1)
这似乎是固定宽度的格式,所以最好的解决方案可能是手动指定字段宽度。
但是,如果我们想做一些快速而又肮脏的事情,我们可以在空白处进行拆分,就像这样:
import re
with open('file.pdb', 'r') as file:
arr = [ re.split("[ \t\r\n]+", line) for line in file ]
这里的字符串"[ \t\r\n]+"
是匹配一个或多个空格字符(空格,制表符,回车符或换行符)的正则表达式。
如果file.pdb
包含上面的文本,则结果如下:
[
['ATOM', '64', "HO2'", 'A', '2', '10.090', '1.313', '5.546', '1.00', '0.00', 'H', ''],
['ATOM', '65', "O3'", 'A', '2', '9.461', '-1.229', '8.060', '1.00', '0.00', 'O', ''],
['ATOM', '66', 'P', 'G', '3', '8.676', '-0.774', '9.370', '1.00', '0.00', 'P', ''],
['ATOM', '67', 'OP1', 'G', '3', '9.541', '-0.969', '10.560', '1.00', '0.00', 'O', '']
]
请注意,每行末尾都有一个空字段。发生这种情况的原因是,行的末尾有空格,将最后一个字段与...“分隔开”。
这对您来说可能不是问题,但是如果是这样,您可以轻松地将其删除,例如通过替换
re.split("[ \t\r\n]+", line)
使用
re.split("[ \t\r\n]+", line)[:-1]
表示将子列表从列表的开头开始,然后在结尾之前结束。