如何在python中将文件的特定行读入2d数组

时间:2015-07-08 21:02:46

标签: python arrays multidimensional-array

您好我是化学博士生“试图”在python中编写代码

我有一个如下所示的输入文件,我将在

中阅读
ITEM: TIMESTEP
20000000
ITEM: NUMBER OF ATOMS
2
ITEM: BOX BOUNDS pp pp pp
0 51.577
0 51.048
1.06653 47.9335
ITEM: ATOMS id type x y z
5 1 15.6042 48.7947 36.9084
27 1 18.4619 1.23863 36.2611
ITEM: TIMESTEP
20005000
ITEM: NUMBER OF ATOMS
2
ITEM: BOX BOUNDS pp pp pp
0 51.577
0 51.048
1.03417 47.9658
ITEM: ATOMS id type x y z
5 1 16.183 47.8777 37.7161
27 1 17.9296 50.8771 36.5807
...................

我想读取文件并使用此代码提取我目前处理的数组的某个点

in_name = raw_input('Name of input: ')    
R_file = (open(in_name, 'r')) #readfile 
for j, line in enumerate(R_file):
    if j%11 == 10:

每次我将获得以27开头的行作为参考。

但是我似乎无法将一行附加到多维数组中。

我最终想要像这样的一系列花车

[[27.00], [1.00], [17.9296], [50.8771],[36.5807]]

当我读到所有数据并不担心我正在阅读的这行时,我会做这样的事情

lines = [line.split() for line in R_file]

我将使用

转换
for x in range(length):
    for y in range(len(lines[x])):
        lines[x][y]=float(lines[x][y])   

我如何一次只为一行做一次line.split(),然后将它附加到我想要的行的数组中?

1 个答案:

答案 0 :(得分:1)

在开始循环文件行之前,您应该创建一个空列表。然后,在你有数据的循环的每次迭代中(我猜在每个11行集的最后一行?),将该行拆分为其组件(.split())。在我看来,此时将数据转换为浮点数更有意义。最后,.append()将这一新数据行添加到您在开头声明的列表中。这为您提供了一系列数字列表,即实际上是一个二维数组。

这样的事情:

file_location = # wherever your data is
data = []
with open(file_location, 'r') as f:
    for index, line in enumerate(f):
        if index % 11 == 10:
            data_line = [float(num) for num in line.split()]
            data.append(data_line)

现在,data看起来像这样:

[[27.0, 1.0, 18.4619, 1.23863, 36.2611],
 [27.0, 1.0, 17.9296, 50.8771, 36.5807]]

附加说明:我使用了with open(...) as f:构造。如果您不熟悉它,这基本上是一种速记,可以避免您在完成文件时使用.close()文件。