行作为列行进入2D数组|蟒蛇

时间:2020-02-26 04:19:24

标签: python-3.x

我正在处理名为.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 

1 个答案:

答案 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]

表示将子列表从列表的开头开始,然后在结尾之前结束。

相关问题