您好我是化学博士生“试图”在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(),然后将它附加到我想要的行的数组中?
答案 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()
文件。