【发布时间】:2021-11-22 11:36:56
【问题描述】:
我有一个包含以下数据的文件 (integral.txt)。
1 H 1 1
3
3.4252509100 0.2769343610
0.6239137300 0.2678388518
0.1688554000 0.0834736696
2 H 1 2
3
4.4252509100 0.2769343610
1.6239137300 0.2678388518
0.1688554000 0.0834736696
我正在编写一个可以读取特定行的代码。例如,我想将第一行读取为 nbasis、label、natom、_ 然后程序读取第二行作为输入,因为我将在 for 循环中使用这个数字,并且每次都可以不同,并且取决于这个数字, 我将读取下一行,所以如果它是三行,程序读取三行并设置一个名为 zeta1, cijk1 的变量,并对接下来的五行执行相同的过程。 我做了如下代码,但我的代码将所有数据作为一个变量读取。
nb = 2 ! This number can be different and here is the simplest case as the data file can be more lines so depend on this number I can read more
with open("integral.txt","r") as input3:
for b in range(nb):
intr = input3.readline()
nprimitive = int(input3.readline())
nbasis, label, natom, _ = intr.split()
for prim in range(nprimitive):
intr2 = input3.readline()
zeta , cijk = intr2.split()
print(zeta,cijk)
Output
3.4252509100 0.2769343610
0.6239137300 0.2678388518
0.1688554000 0.0834736696
4.4252509100 0.2769343610
1.6239137300 0.2678388518
0.1688554000 0.0834736696
The output I want to get
zeta1 cijk1
3.4252509100 0.2769343610
0.6239137300 0.2678388518
0.1688554000 0.0834736696
zeta2 cijk2
4.4252509100 0.2769343610
1.6239137300 0.2678388518
0.1688554000 0.0834736696
【问题讨论】:
-
即使您可以从输入数据中设置变量,您的代码也必须依赖于这些变量名称(您无法预测,因为它们来自您可能获得的任何输入)。这不是很实用。你可能会得到一本字典(比如 {"zeta1" : [3.4252509100, 0.6239137300, 0.1688554000], ...} 或者你可以打印你得到的值(在它们的标题下)。这有意义吗?
-
问题是我会再次使用它们,我会用zeta1和zeta2做一些计算,比如乘法,所以我需要zeta1有三个值,zeta2有其他三个值
-
我看到的唯一不同是您的输出没有带有编号的
print('zeta\tcijk') -
@StevenSummers 但我想将每个 zeta 分开,因为我将在输出中使用每个 zeta。我只有一个zeta。我想让 zeta 依赖于“nb”,所以如果 nb 是 2。我会得到 zeta1 和 zeta2。如果是 3 我可以得到 zeta1、zeta2 和 zeta3 等等
-
从你所拥有的,它不是已经做到了吗?使用
nb=2,您将获得前 2 套