在python中的行中存储特定值

2024-09-30 22:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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可能在另一行中。所以,我能想到的唯一合乎逻辑的方法是,如果某个变量等于该关键字,则将值存储在该行中。事实上,最有用的是创建一个空的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]),
}

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


Tags: 文件方法txtnormmynplinearray
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:50

if line=="PhoIndex"

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

if "PhoIndex" in line:

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

line_array = line.split(" ")

然后,如果你的数字总是这个列表的第三和第二个元素,如果它是索引行,你可以使用

line_array.pop() ## remove the last element

line_array.pop(0)

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

然后对每一行执行此操作,使用相应的字符串查询行的类型(如“PhoIndex”),并根据行结构弹出相应的列表。如果您的txt文件始终具有常规结构,则此功能有效。如果没有,则只需以相同的方式继续,直到使用split方法,然后通过将元素与其他元素区分开来的特性(例如包含句点字符)检索所创建列表中的元素

剩下的就是空模板字典的定义,正如您在上面“循环之前”所做的那样,然后将您获得的列表分配为它们各自字典键的值。完成了

相关问题 更多 >