将特定值存储在python的一行中

问题描述 投票:1回答:1

我有一个txt输出文件,我想将某些值存储在行中。

TBabs*powerlaw   
2 PhoIndex 2.427 3.447  FFFFFFFFF
3 norm 8.454501369e-06 1.387320996e-05  FFFFFFFFF
0p3_1p5abs 1.512967493e-14 1.326152487e-14 1.822308766e-14
0p3_1p5plunabs -13.50750953 -13.21090697  FFFFFFFFF
TBabs(powerlaw + diskbb)
Ftest: 11.9512537 14 11.9512537 12 1

在上面的txt文件中,我想存储PhoIndex的值(2.427和3.447)。我尝试了以下方法:

my_list=[]
filepath = 'output'
with open(filepath) as fp:
   for line in fp:
       if line=="PhoIndex"       
       my_list.append(line)

我不想根据它们的顺序对它们进行索引,因为输出是动态的,并且PhoIndex可能在另一行中。因此,我能想到的唯一合乎逻辑的方法是,如果某个变量等于该关键字的eq,则将值存储在该行中。实际上,最有用的方法是创建一个空的dictionary并能够在输出中填充值,例如

循环前:

source = {
 'model': '',
 'PhoIndex': np.array([]),
 'norm': np.array([]),
 '0p3_1p5abs': np.array([]),
 '0p3_1p5plunabs': np.array([]),
}

循环后:

source = {
 'model': 'TBabs*powerlaw',
 'PhoIndex': np.array([2.427, 3.447]),
 'norm': np.array([8.454501369e-06, 1.387320996e-05]),
 '0p3_1p5abs': np.array([1.512967493e-14, 1.326152487e-14,1.822308766e-14]),
 '0p3_1p5plunabs': np.array([0p3_1p5plunabs,-13.50750953, -13.21090697]),
}

但是我几乎不知道该怎么做。感谢您对上述任何问题的帮助。

python arrays python-3.x list dictionary
1个回答
0
投票

if line=="PhoIndex"

您正在检查该行是否等于该字符串。您应该使用[

包含选中的行是否包含该字符串。

if "PhoIndex" in line:

打开循环。然后,可以通过分隔每个空格上的字符串元素,将行转换为数组,如下所示:

line_array = line.split(" ")

然后,假设您的数字始终是此数组的第三和第二个元素(如果是PhoIndex行,则可以使用

line_array.pop() ## remove the last element

line_array.pop(0)

line_array.pop(0) ## remove the first two elements

然后,通过使用相应的字符串查询行的类型(如使用“ PhoIndex”),对每一行简单地执行此操作,并且根据行结构弹出相应的列表。如果您的txt文件始终具有常规结构,则此方法有效。如果不是这样,则只需以相同的方式进行操作,直到split方法,然后只需通过将它们与其余所有字符区分开的特征(例如包含句点字符等)来检索所需列表的元素即可。

剩下的就是空模板字典的定义,就像您在“循环之前”一样,然后将获得的列表分配为其各自字典键的值。完成。

© www.soinside.com 2019 - 2024. All rights reserved.