Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将行作为列放入二维数组| python_Python 3.x - Fatal编程技术网

Python 3.x 将行作为列放入二维数组| python

Python 3.x 将行作为列放入二维数组| python,python-3.x,Python 3.x,我正在处理名为.pdb的文件类型,我想在二维数组中插入这些行吗?(文件比这里显示的要好)稍后我想分别检索这些字符(例如: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

我正在处理名为.pdb的文件类型,我想在二维数组中插入这些行吗?(文件比这里显示的要好)稍后我想分别检索这些字符(例如: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 

这似乎是一种固定宽度的格式,因此最好的解决方案可能是手动指定字段宽度

然而,如果我们想做一些快速而肮脏的事情,我们可以在空白处分开,就像这样:

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)


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

这段代码对我来说很好,最终的数组类似于arr=[[]],[[[]],[[[]]一行2D数组,如何将这些行作为x[]和列作为Y[]我很想学习通过两个if/while循环的方法,谢谢
re.split("[ \t\r\n]+", line)[:-1]