你好,我是一名化学博士生,正在"尝试"用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((之类的操作,然后将其附加到所需行的数组中?
在开始循环文件行之前,应该创建一个空列表。然后,在有数据的循环的每次迭代中(我想是在每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()
。