我有一个包含以下数据的文件:
POTENTIAL
TYPE 1
-5.19998150116627E+07 -5.09571848744513E+07 -4.99354600752570E+07 -4.89342214499422E+07 -4.79530582388520E+07
-4.69915679183017E+07 -4.60493560354389E+07 -4.51260360464197E+07 -4.42212291578282E+07 -4.33345641712756E+07
-4.24656773311163E+07 -4.16142121752159E+07 -4.07798193887125E+07 -3.99621566607090E+07 -3.91608885438409E+07
-3.83756863166569E+07
-8.99995987594328E+07 -8.81884626368405E+07 -8.64137733336537E+07 -8.46747974037847E+07 -8.29708161608188E+07
-8.13011253809965E+07 -7.96650350121689E+07 -7.80618688886128E+07 -7.64909644515842E+07 -7.49516724754953E+07
-7.34433567996002E+07 -7.19653940650832E+07 -7.05171734574350E+07 -6.90980964540154E+07 -6.77075765766936E+07
-6.63450391494693E+07
请注意根据Nsh的评论,这些数据不是单行。它们每行总共有5个数据,根据这个例子,它是4行,第4行只有一个数据。所以,我有16个浮点线超过4线。我总是知道总数(即本例中为16)
我的目标是将它们作为列表阅读(如果有更好的事情,请告诉我)。带有单个条目的行表示列表的结尾(例如,列表[1]以-3.83756863166569E+07
结尾)。
我试着把它读作:
if line.startswith("POTENTIAL"):
lines = f.readline()
if lines.startswith("TYPE "):
lines=f.readline()
lines=lines.split()
lines = [float(i) for i in lines]
pots.append(lines)
print(pots)
给出了结果:
[[-51999815.0116627, -50957184.8744513, -49935460.075257, -48934221.4499422, -47953058.238852]]
即。只是列表中的第一行,而不是更进一步。 我的目标是将它们作为不同的列表(可能)作为:
pots[1]=[-5.19998150116627E+07....-3.83756863166569E+07]
pots[2]=[-8.99995987594328E+07....-6.63450391494693E+07]
我已经阅读了广泛搜索的谷歌(目前的状态本身来自另一个SO问题),但由于我的经验不足,我无法解决我的问题。
请帮助。
答案 0 :(得分:2)
使用+
代替append
它会将线条元素附加到花盆中
pots = pots + lines
我在开始时没有看到:
pots = []
在这种情况下需要......
答案 1 :(得分:0)
ITEMS_PER_LIST = 16
lists = [[]] # list of lists with initialized first sublist
with open('data.txt') as f:
for line in f:
if line.startswith(("POTENTIAL", "TYPE")):
continue
if len(lists[-1]) == ITEMS_PER_LIST:
lists.append([]) # create new list
lists[-1].extend([float(i) for i in line.split()])
验证标题需要进一步调整。