Сохранить значение c в строке в python - PullRequest
1 голос
/ 02 мая 2020

У меня есть выходной файл 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)

Я не хочу индексировать их в зависимости от их порядка, потому что выходные данные являются Dynami c и PhoIndex может быть в другой строке. Таким образом, единственный логический способ, который я могу придумать, - это если какая-либо переменная является eq для этого ключевого слова, хранить значения в этой строке. На самом деле, самая полезная вещь - создать пустой dictionary и заполнить его значениями в выводе, такими как

До l oop:

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

После l oop:

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]),
}

Но я почти не знаю, как это сделать. Я ценю любую помощь в отношении любых вопросов, упомянутых выше.

1 Ответ

1 голос
/ 02 мая 2020

С

if line=="PhoIndex"

вы проверяете, является ли строка РАВНОЙ к этой строке. Вам лучше проверить, содержит ли проверенная строка эту строку, используя

if "PhoIndex" in line:

, чтобы открыть ваш l oop. Затем вы можете преобразовать строку в список, разделив строковые элементы в каждом пробеле, например:

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") и соответствующий всплывающий список в соответствии со структурами строк. Это работает, если ваш текстовый файл всегда имеет регулярную структуру. Если нет, то просто продолжайте таким же образом до метода split, а затем просто извлекайте нужные элементы созданного списка по характеристикам, которые отличают их от всех остальных, например, содержат символ точки или что-то подобное.

Все слева - это определение пустого шаблонного словаря, как вы делали выше "до l oop", а затем присваивайте полученные списки в качестве значений их соответствующих ключей словаря. сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...